diff --git a/examples/frameworks/django/testing/testing/apps/someapp/middleware.py b/examples/frameworks/django/testing/testing/apps/someapp/middleware.py new file mode 100644 index 00000000..3fe5a825 --- /dev/null +++ b/examples/frameworks/django/testing/testing/apps/someapp/middleware.py @@ -0,0 +1,22 @@ +from multiprocessing import Process, Queue +import requests +import gevent + +def child_process(queue): + while True: + print queue.get() + requests.get('http://requestb.in/15s95oz1') + +class GunicornSubProcessTestMiddleware(object): + def __init__(self): + super(GunicornSubProcessTestMiddleware, self).__init__() + self.queue = Queue() + self.process = Process(target=child_process, args=(self.queue,)) + self.process.start() + + def process_request(self, request): + self.queue.put(('REQUEST',)) + + def process_response(self, request, response): + self.queue.put(('RESPONSE',response.status_code)) + return response diff --git a/examples/frameworks/django/testing/testing/settings.py b/examples/frameworks/django/testing/testing/settings.py index cb8eca68..852dd1ef 100644 --- a/examples/frameworks/django/testing/testing/settings.py +++ b/examples/frameworks/django/testing/testing/settings.py @@ -98,6 +98,8 @@ MIDDLEWARE_CLASSES = ( 'django.contrib.messages.middleware.MessageMiddleware', # Uncomment the next line for simple clickjacking protection: # 'django.middleware.clickjacking.XFrameOptionsMiddleware', + # uncomment the next line to test multiprocessing + #'testing.apps.someapp.middleware.GunicornSubProcessTestMiddleware', ) ROOT_URLCONF = 'testing.urls' diff --git a/gunicorn/workers/ggevent.py b/gunicorn/workers/ggevent.py index c92546c5..3c080862 100644 --- a/gunicorn/workers/ggevent.py +++ b/gunicorn/workers/ggevent.py @@ -62,10 +62,12 @@ class GeventWorker(AsyncWorker): server = StreamServer(self.socket, handle=self.handle, spawn=pool) server.start() + pid = os.getpid() try: while self.alive: self.notify() - if self.ppid != os.getppid(): + + if pid == os.getpid() and self.ppid != os.getppid(): self.log.info("Parent changed, shutting down: %s", self) break