From cdd3e1dc2b6ea7b211f4c3159cbf91b6d5113cbf Mon Sep 17 00:00:00 2001 From: benoitc Date: Wed, 27 Jun 2012 08:08:04 +0200 Subject: [PATCH] check parents if we are in the worker. fix #348 --- .../testing/apps/someapp/middleware.py | 22 +++++++++++++++++++ .../django/testing/testing/settings.py | 2 ++ gunicorn/workers/ggevent.py | 4 +++- 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 examples/frameworks/django/testing/testing/apps/someapp/middleware.py 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