diff options
| author | ianb <devnull@localhost> | 2006-12-18 00:33:40 +0000 |
|---|---|---|
| committer | ianb <devnull@localhost> | 2006-12-18 00:33:40 +0000 |
| commit | 8fd237055f44f36241c1cd7bf240c7ffa189ee1e (patch) | |
| tree | e958f122dc0d63ea694eebad2b5d29fa712ce40b /paste/httpserver.py | |
| parent | 09a9e2d7a5c276164971cae9492e6a663b44abf8 (diff) | |
| download | paste-8fd237055f44f36241c1cd7bf240c7ffa189ee1e.tar.gz | |
Apply #146, avoid orphaned threadpool, from jek
Diffstat (limited to 'paste/httpserver.py')
| -rwxr-xr-x | paste/httpserver.py | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/paste/httpserver.py b/paste/httpserver.py index 7c44e7d..4a01dbb 100755 --- a/paste/httpserver.py +++ b/paste/httpserver.py @@ -360,7 +360,7 @@ class ThreadPool(object): """ SHUTDOWN = object() - def __init__(self, nworkers, name="ThreadPool"): + def __init__(self, nworkers, name="ThreadPool", daemon=False): """ Create thread pool with `nworkers` worker threads. """ @@ -371,9 +371,13 @@ class ThreadPool(object): for i in range(self.nworkers): worker = threading.Thread(target=self.worker_thread_callback, name=("%s worker %d" % (self.name, i))) + worker.setDaemon(daemon) worker.start() self.workers.append(worker) + if not daemon: + atexit.register(lambda: self.shutdown()) + def worker_thread_callback(self): """ Worker thread should call this method to get and process queued @@ -401,13 +405,13 @@ class ThreadPoolMixIn: """ Mix-in class to process requests from a thread pool """ - def __init__(self, nworkers): + def __init__(self, nworkers, daemon=False): # Create and start the workers self.running = True assert nworkers > 0, "ThreadPoolMixin servers must have at least one worker" self.thread_pool = ThreadPool(nworkers, "ThreadPoolMixin HTTP server on %s:%d" - % (self.server_name, self.server_port)) + % (self.server_name, self.server_port), daemon) def process_request(self, request, client_address): """ @@ -486,10 +490,11 @@ class WSGIServer(ThreadingMixIn, WSGIServerBase): class WSGIThreadPoolServer(ThreadPoolMixIn, WSGIServerBase): def __init__(self, wsgi_application, server_address, - RequestHandlerClass=None, ssl_context=None, nworkers=10): + RequestHandlerClass=None, ssl_context=None, + nworkers=10, daemon_threads=False): WSGIServerBase.__init__(self, wsgi_application, server_address, RequestHandlerClass, ssl_context) - ThreadPoolMixIn.__init__(self, nworkers) + ThreadPoolMixIn.__init__(self, nworkers, daemon_threads) def serve(application, host=None, port=None, handler=None, ssl_pem=None, ssl_context=None, server_version=None, protocol_version=None, @@ -615,7 +620,8 @@ def serve(application, host=None, port=None, handler=None, ssl_pem=None, if converters.asbool(use_threadpool): server = WSGIThreadPoolServer(application, server_address, handler, - ssl_context, int(threadpool_workers)) + ssl_context, int(threadpool_workers), + daemon_threads) else: server = WSGIServer(application, server_address, handler, ssl_context) if daemon_threads: |
