From 9a83d719b23fe28667a9c76bac25ba66651f8ccf Mon Sep 17 00:00:00 2001 From: benoitc Date: Mon, 4 Nov 2013 14:43:40 +0100 Subject: [PATCH] fix gevent worker --- gunicorn/workers/ggevent.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/gunicorn/workers/ggevent.py b/gunicorn/workers/ggevent.py index 60aba6c2..75d27ea1 100644 --- a/gunicorn/workers/ggevent.py +++ b/gunicorn/workers/ggevent.py @@ -12,6 +12,8 @@ from datetime import datetime from functools import partial import time +_socket = __import__("socket") + # workaround on osx, disable kqueue if sys.platform == "darwin": os.environ['EVENT_NOKQUEUE'] = "1" @@ -22,7 +24,7 @@ except ImportError: raise RuntimeError("You need gevent installed to use this worker.") from gevent.pool import Pool from gevent.server import StreamServer -from gevent.socket import wait_write +from gevent.socket import wait_write, socket from gevent import pywsgi import gunicorn @@ -63,7 +65,7 @@ class GeventWorker(AsyncWorker): server_class = None wsgi_handler = None - def patch(cls): + def patch(self): from gevent import monkey monkey.noisy = False monkey.patch_all() @@ -71,6 +73,14 @@ class GeventWorker(AsyncWorker): # monkey patch sendfile to make it none blocking patch_sendfile() + # patch sockets + sockets = [] + for s in self.sockets: + sockets.append(socket(s.FAMILY, _socket.SOCK_STREAM, + _sock=s)) + self.sockets = sockets + + def notify(self): super(GeventWorker, self).notify() if self.ppid != os.getppid():