summaryrefslogtreecommitdiff
path: root/paste/httpserver.py
diff options
context:
space:
mode:
authorbbangert <devnull@localhost>2008-06-20 03:39:57 +0000
committerbbangert <devnull@localhost>2008-06-20 03:39:57 +0000
commit02d6113384877ff28ca80482ad5b4b941909f4fa (patch)
tree54fa5bc2eebe6d49c84b3ecabbac5275aff86172 /paste/httpserver.py
parentf69a4351cd2378f7652dd8a40ed1275a866de5a8 (diff)
downloadpaste-02d6113384877ff28ca80482ad5b4b941909f4fa.tar.gz
Adding request_queue_size option to increase socket queue for Paste#http server.
Diffstat (limited to 'paste/httpserver.py')
-rwxr-xr-xpaste/httpserver.py37
1 files changed, 26 insertions, 11 deletions
diff --git a/paste/httpserver.py b/paste/httpserver.py
index 73a687f..a4617ff 100755
--- a/paste/httpserver.py
+++ b/paste/httpserver.py
@@ -323,9 +323,11 @@ except ImportError:
SocketErrors = (socket.error,)
class SecureHTTPServer(HTTPServer):
def __init__(self, server_address, RequestHandlerClass,
- ssl_context=None):
+ ssl_context=None, request_queue_size=None):
assert not ssl_context, "pyOpenSSL not installed"
HTTPServer.__init__(self, server_address, RequestHandlerClass)
+ if request_queue_size:
+ self.socket.listen(request_queue_size)
else:
class _ConnFixer(object):
@@ -351,7 +353,7 @@ else:
"""
def __init__(self, server_address, RequestHandlerClass,
- ssl_context=None):
+ ssl_context=None, request_queue_size=None):
# This overrides the implementation of __init__ in python's
# SocketServer.TCPServer (which BaseHTTPServer.HTTPServer
# does not override, thankfully).
@@ -369,6 +371,8 @@ else:
self._lock.release()
self.socket = TSafeConnection(ssl_context, self.socket)
self.server_bind()
+ if request_queue_size:
+ self.socket.listen(request_queue_size)
self.server_activate()
def get_request(self):
@@ -1080,7 +1084,6 @@ class ThreadPoolMixIn(object):
"""
# We set the timeout here so that we can trap interrupts on windows
self.socket.settimeout(1)
- self.socket.listen(self.request_queue_size)
def server_close(self):
"""
@@ -1092,9 +1095,11 @@ class ThreadPoolMixIn(object):
class WSGIServerBase(SecureHTTPServer):
def __init__(self, wsgi_application, server_address,
- RequestHandlerClass=None, ssl_context=None):
+ RequestHandlerClass=None, ssl_context=None,
+ request_queue_size=None):
SecureHTTPServer.__init__(self, server_address,
- RequestHandlerClass, ssl_context)
+ RequestHandlerClass, ssl_context,
+ request_queue_size=request_queue_size)
self.wsgi_application = wsgi_application
self.wsgi_socket_timeout = None
@@ -1112,9 +1117,10 @@ class WSGIThreadPoolServer(ThreadPoolMixIn, WSGIServerBase):
def __init__(self, wsgi_application, server_address,
RequestHandlerClass=None, ssl_context=None,
nworkers=10, daemon_threads=False,
- threadpool_options=None):
+ threadpool_options=None, request_queue_size=None):
WSGIServerBase.__init__(self, wsgi_application, server_address,
- RequestHandlerClass, ssl_context)
+ RequestHandlerClass, ssl_context,
+ request_queue_size=request_queue_size)
if threadpool_options is None:
threadpool_options = {}
ThreadPoolMixIn.__init__(self, nworkers, daemon_threads,
@@ -1130,7 +1136,7 @@ def serve(application, host=None, port=None, handler=None, ssl_pem=None,
ssl_context=None, server_version=None, protocol_version=None,
start_loop=True, daemon_threads=None, socket_timeout=None,
use_threadpool=None, threadpool_workers=10,
- threadpool_options=None):
+ threadpool_options=None, request_queue_size=5):
"""
Serves your ``application`` over HTTP(S) via WSGI interface
@@ -1226,6 +1232,12 @@ def serve(application, host=None, port=None, handler=None, ssl_pem=None,
threadpool. See paste.httpserver.ThreadPool for specific
options (``threadpool_workers`` is a specific option that can
also go here).
+
+ ``request_queue_size``
+
+ The 'backlog' argument to socket.listen(); specifies the
+ maximum number of queued connections.
+
"""
is_ssl = False
if ssl_pem or ssl_context:
@@ -1264,9 +1276,11 @@ def serve(application, host=None, port=None, handler=None, ssl_pem=None,
server = WSGIThreadPoolServer(application, server_address, handler,
ssl_context, int(threadpool_workers),
daemon_threads,
- threadpool_options=threadpool_options)
+ threadpool_options=threadpool_options,
+ request_queue_size=request_queue_size)
else:
- server = WSGIServer(application, server_address, handler, ssl_context)
+ server = WSGIServer(application, server_address, handler, ssl_context,
+ request_queue_size=request_queue_size)
if daemon_threads:
server.daemon_threads = daemon_threads
@@ -1299,7 +1313,7 @@ def server_runner(wsgi_app, global_conf, **kwargs):
'threadpool_dying_limit', 'threadpool_spawn_if_under',
'threadpool_max_zombie_threads_before_die',
'threadpool_hung_check_period',
- 'threadpool_max_requests']:
+ 'threadpool_max_requests', 'request_queue_size']:
if name in kwargs:
kwargs[name] = int(kwargs[name])
for name in ['use_threadpool', 'daemon_threads']:
@@ -1375,6 +1389,7 @@ server_runner.__doc__ = (serve.__doc__ or '') + """
When threads are killed or the process restarted, this email
address will be contacted (using an SMTP server on localhost).
+
"""