mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
fix compatibility with gevent 0.14 dev version
Move "import gevent.wsgi" into a separate module, which is not imported if pywsgi worker is requested. (The gevent.wsgi currently not provided by gevent trunk but pywsgi works fine.)
This commit is contained in:
parent
c74894f2a1
commit
2ab4bbf46f
@ -18,7 +18,7 @@ except ImportError:
|
|||||||
raise RuntimeError("You need gevent installed to use this worker.")
|
raise RuntimeError("You need gevent installed to use this worker.")
|
||||||
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
|
||||||
|
|
||||||
import gunicorn
|
import gunicorn
|
||||||
from gunicorn.workers.async import AsyncWorker
|
from gunicorn.workers.async import AsyncWorker
|
||||||
@ -94,12 +94,15 @@ class GeventWorker(AsyncWorker):
|
|||||||
except gevent.GreenletExit:
|
except gevent.GreenletExit:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def init_process(self):
|
if hasattr(gevent.core, 'dns_shutdown'):
|
||||||
#gevent doesn't reinitialize dns for us after forking
|
|
||||||
#here's the workaround
|
def init_process(self):
|
||||||
gevent.core.dns_shutdown(fail_requests=1)
|
#gevent 0.13 and older doesn't reinitialize dns for us after forking
|
||||||
gevent.core.dns_init()
|
#here's the workaround
|
||||||
super(GeventWorker, self).init_process()
|
gevent.core.dns_shutdown(fail_requests=1)
|
||||||
|
gevent.core.dns_init()
|
||||||
|
super(GeventWorker, self).init_process()
|
||||||
|
|
||||||
|
|
||||||
class GeventBaseWorker(Worker):
|
class GeventBaseWorker(Worker):
|
||||||
"""\
|
"""\
|
||||||
@ -151,32 +154,14 @@ class GeventBaseWorker(Worker):
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def init_process(self):
|
if hasattr(gevent.core, 'dns_shutdown'):
|
||||||
#gevent doesn't reinitialize dns for us after forking
|
|
||||||
#here's the workaround
|
|
||||||
gevent.core.dns_shutdown(fail_requests=1)
|
|
||||||
gevent.core.dns_init()
|
|
||||||
super(GeventBaseWorker, self).init_process()
|
|
||||||
|
|
||||||
|
def init_process(self):
|
||||||
|
#gevent 0.13 and older doesn't reinitialize dns for us after forking
|
||||||
class WSGIHandler(wsgi.WSGIHandler):
|
#here's the workaround
|
||||||
def log_request(self, *args):
|
gevent.core.dns_shutdown(fail_requests=1)
|
||||||
pass
|
gevent.core.dns_init()
|
||||||
|
super(GeventBaseWorker, self).init_process()
|
||||||
def prepare_env(self):
|
|
||||||
env = super(WSGIHandler, self).prepare_env()
|
|
||||||
env['RAW_URI'] = self.request.uri
|
|
||||||
return env
|
|
||||||
|
|
||||||
|
|
||||||
class WSGIServer(wsgi.WSGIServer):
|
|
||||||
base_env = BASE_WSGI_ENV
|
|
||||||
|
|
||||||
class GeventWSGIWorker(GeventBaseWorker):
|
|
||||||
"The libevent HTTP based workers"
|
|
||||||
server_class = WSGIServer
|
|
||||||
wsgi_handler = WSGIHandler
|
|
||||||
|
|
||||||
|
|
||||||
class PyWSGIHandler(pywsgi.WSGIHandler):
|
class PyWSGIHandler(pywsgi.WSGIHandler):
|
||||||
|
|||||||
22
gunicorn/workers/ggevent_wsgi.py
Normal file
22
gunicorn/workers/ggevent_wsgi.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# -*- coding: utf-8 -
|
||||||
|
#
|
||||||
|
# This file is part of gunicorn released under the MIT license.
|
||||||
|
# See the NOTICE for more information.
|
||||||
|
|
||||||
|
from __future__ import with_statement
|
||||||
|
from gunicorn.worker.ggevent import *
|
||||||
|
from gevent import wsgi
|
||||||
|
|
||||||
|
|
||||||
|
class WSGIHandler(wsgi.WSGIHandler):
|
||||||
|
def log_request(self, *args):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def prepare_env(self):
|
||||||
|
env = super(WSGIHandler, self).prepare_env()
|
||||||
|
env['RAW_URI'] = self.request.uri
|
||||||
|
return env
|
||||||
|
|
||||||
|
|
||||||
|
class WSGIServer(wsgi.WSGIServer):
|
||||||
|
base_env = BASE_WSGI_ENV
|
||||||
2
setup.py
2
setup.py
@ -57,7 +57,7 @@ setup(
|
|||||||
sync=gunicorn.workers.sync:SyncWorker
|
sync=gunicorn.workers.sync:SyncWorker
|
||||||
eventlet=gunicorn.workers.geventlet:EventletWorker
|
eventlet=gunicorn.workers.geventlet:EventletWorker
|
||||||
gevent=gunicorn.workers.ggevent:GeventWorker
|
gevent=gunicorn.workers.ggevent:GeventWorker
|
||||||
gevent_wsgi=gunicorn.workers.ggevent:GeventWSGIWorker
|
gevent_wsgi=gunicorn.workers.ggevent_wsgi:GeventWSGIWorker
|
||||||
gevent_pywsgi=gunicorn.workers.ggevent:GeventPyWSGIWorker
|
gevent_pywsgi=gunicorn.workers.ggevent:GeventPyWSGIWorker
|
||||||
tornado=gunicorn.workers.gtornado:TornadoWorker
|
tornado=gunicorn.workers.gtornado:TornadoWorker
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user