From ff3b31fed6d1c090e4957a4c3d9432a375f2d216 Mon Sep 17 00:00:00 2001 From: Unrud Date: Sat, 21 May 2016 00:52:22 +0200 Subject: [PATCH] Use threading in integrated webserver --- radicale/__init__.py | 9 +++++++++ radicale/__main__.py | 7 ++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/radicale/__init__.py b/radicale/__init__.py index 9894d9f..17866f7 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -30,6 +30,7 @@ import os import pprint import base64 import socket +import socketserver import ssl import wsgiref.simple_server import re @@ -92,6 +93,14 @@ class HTTPSServer(HTTPServer): self.server_activate() +class ThreadedHTTPServer(socketserver.ThreadingMixIn, HTTPServer): + pass + + +class ThreadedHTTPSServer(socketserver.ThreadingMixIn, HTTPSServer): + pass + + class RequestHandler(wsgiref.simple_server.WSGIRequestHandler): """HTTP requests handler.""" def log_message(self, *args, **kwargs): diff --git a/radicale/__main__.py b/radicale/__main__.py index 73f7f2b..c60b834 100644 --- a/radicale/__main__.py +++ b/radicale/__main__.py @@ -33,7 +33,8 @@ import ssl from wsgiref.simple_server import make_server from . import ( - Application, config, HTTPServer, HTTPSServer, log, RequestHandler, VERSION) + Application, config, ThreadedHTTPServer, ThreadedHTTPSServer, log, + RequestHandler, VERSION) # This is a script, many branches and variables @@ -152,7 +153,7 @@ def run(): # Create collection servers servers = {} if configuration.getboolean("server", "ssl"): - server_class = HTTPSServer + server_class = ThreadedHTTPSServer server_class.certificate = configuration.get("server", "certificate") server_class.key = configuration.get("server", "key") server_class.cyphers = configuration.get("server", "cyphers") @@ -168,7 +169,7 @@ def run(): "Error while reading SSL %s %r: %s" % ( name, filename, exception)) else: - server_class = HTTPServer + server_class = ThreadedHTTPServer if not configuration.getboolean("server", "dns_lookup"): RequestHandler.address_string = lambda self: self.client_address[0]