workaround to prevent segfault with current gevent on osx. Disable

kqueue.
This commit is contained in:
benoitc 2010-09-01 11:30:20 +02:00
parent 5c498b6a89
commit 8d089f95f9

View File

@ -6,12 +6,17 @@
from __future__ import with_statement from __future__ import with_statement
import os import os
import sys
# workaround on osx, disable kqueue
if sys.platform == "darwin":
os.environ['EVENT_NOKQUEUE'] = "1"
import gevent import gevent
from gevent.pool import Pool from gevent.pool import Pool
from gevent.server import StreamServer from gevent.server import StreamServer
from gevent import pywsgi, wsgi from gevent import pywsgi, wsgi
from gevent import hub
import gunicorn import gunicorn
from gunicorn.workers.async import AsyncWorker from gunicorn.workers.async import AsyncWorker
@ -53,6 +58,7 @@ class GeventWorker(AsyncWorker):
monkey.noisy = False monkey.noisy = False
monkey.patch_all() monkey.patch_all()
def timeout_ctx(self): def timeout_ctx(self):
return gevent.Timeout(self.cfg.keepalive, False) return gevent.Timeout(self.cfg.keepalive, False)
@ -80,6 +86,12 @@ class GeventWorker(AsyncWorker):
pass pass
def handle_request(self, *args):
try:
super(GeventWorker, self).handle_request(*args)
except gevent.GreenletExit:
pass
def init_process(self): def init_process(self):
#gevent doesn't reinitialize dns for us after forking #gevent doesn't reinitialize dns for us after forking
#here's the workaround #here's the workaround