diff --git a/examples/slowclient.py b/examples/slowclient.py index d4304a76..b4bc2019 100644 --- a/examples/slowclient.py +++ b/examples/slowclient.py @@ -3,12 +3,10 @@ # This file is part of gunicorn released under the MIT license. # See the NOTICE for more information. -from wsgiref.validate import validator import time -@validator def app(environ, start_response): """Application which cooperatively pauses 10 seconds before responding""" data = 'Hello, World!\n' diff --git a/examples/websocket.py b/examples/websocket.py index 02e032bf..b49ab5d0 100644 --- a/examples/websocket.py +++ b/examples/websocket.py @@ -17,7 +17,6 @@ from gunicorn.workers.async import ALREADY_HANDLED from eventlet import pools import eventlet -from eventlet.common import get_errno class WebSocketWSGI(object): def __init__(self, handler): diff --git a/gunicorn/workers/geventlet.py b/gunicorn/workers/geventlet.py index 6a634148..7d91bc0c 100644 --- a/gunicorn/workers/geventlet.py +++ b/gunicorn/workers/geventlet.py @@ -25,7 +25,7 @@ class EventletWorker(AsyncWorker): import eventlet if eventlet.version_info < (0,9,7): raise RuntimeError("You need eventlet >= 0.9.7") - eventlet.monkey_patch() + eventlet.monkey_patch(os=False) def init_process(self): hubs.use_hub() @@ -40,20 +40,24 @@ class EventletWorker(AsyncWorker): pool = greenpool.GreenPool(self.worker_connections) acceptor = greenthread.spawn(self.acceptor, pool) - while self.alive: - self.notify() + try: + while self.alive: + self.notify() + + if self.ppid != os.getppid(): + self.log.info("Parent changed, shutting down: %s" % self) + greenthread.kill(acceptor, eventlet.StopServe) + break - if self.ppid != os.getppid(): - self.log.info("Parent changed, shutting down: %s" % self) - greenthread.kill(acceptor, eventlet.StopServe) - break - - eventlet.sleep(0.1) - - with eventlet.Timeout(self.timeout, False): - pool.waitall() - os._exit(3) + eventlet.sleep(0.1) + with eventlet.Timeout(self.timeout, False): + if pool.waiting(): + pool.waitall() + + except KeyboardInterrupt: + pass + def acceptor(self, pool): greenthread.getcurrent() while self.alive: