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.")
|
||||
from gevent.pool import Pool
|
||||
from gevent.server import StreamServer
|
||||
from gevent import pywsgi, wsgi
|
||||
from gevent import pywsgi
|
||||
|
||||
import gunicorn
|
||||
from gunicorn.workers.async import AsyncWorker
|
||||
@ -94,12 +94,15 @@ class GeventWorker(AsyncWorker):
|
||||
except gevent.GreenletExit:
|
||||
pass
|
||||
|
||||
def init_process(self):
|
||||
#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(GeventWorker, self).init_process()
|
||||
if hasattr(gevent.core, 'dns_shutdown'):
|
||||
|
||||
def init_process(self):
|
||||
#gevent 0.13 and older doesn't reinitialize dns for us after forking
|
||||
#here's the workaround
|
||||
gevent.core.dns_shutdown(fail_requests=1)
|
||||
gevent.core.dns_init()
|
||||
super(GeventWorker, self).init_process()
|
||||
|
||||
|
||||
class GeventBaseWorker(Worker):
|
||||
"""\
|
||||
@ -151,32 +154,14 @@ class GeventBaseWorker(Worker):
|
||||
except:
|
||||
pass
|
||||
|
||||
def init_process(self):
|
||||
#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()
|
||||
if hasattr(gevent.core, 'dns_shutdown'):
|
||||
|
||||
|
||||
|
||||
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
|
||||
|
||||
class GeventWSGIWorker(GeventBaseWorker):
|
||||
"The libevent HTTP based workers"
|
||||
server_class = WSGIServer
|
||||
wsgi_handler = WSGIHandler
|
||||
def init_process(self):
|
||||
#gevent 0.13 and older 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()
|
||||
|
||||
|
||||
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
|
||||
eventlet=gunicorn.workers.geventlet:EventletWorker
|
||||
gevent=gunicorn.workers.ggevent:GeventWorker
|
||||
gevent_wsgi=gunicorn.workers.ggevent:GeventWSGIWorker
|
||||
gevent_wsgi=gunicorn.workers.ggevent_wsgi:GeventWSGIWorker
|
||||
gevent_pywsgi=gunicorn.workers.ggevent:GeventPyWSGIWorker
|
||||
tornado=gunicorn.workers.gtornado:TornadoWorker
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user