diff --git a/gunicorn/workers/ggevent2.py b/gunicorn/workers/ggevent2.py index 622b23a4..2fb68034 100644 --- a/gunicorn/workers/ggevent2.py +++ b/gunicorn/workers/ggevent2.py @@ -10,62 +10,48 @@ from gevent import core from gevent import monkey monkey.noisy = False from gevent.pool import Pool -from gevent import wsgi +from gevent import pywsgi import gunicorn from gunicorn.workers.base import Worker -class WSGIHandler(wsgi.WSGIHandler): +class WSGIHandler(pywsgi.WSGIHandler): def log_request(self, *args): pass -class GEvent2Worker(Worker): + +class WSGIServer(pywsgi.WSGIServer): + base_env = {'GATEWAY_INTERFACE': 'CGI/1.1', + 'SERVER_SOFTWARE': 'gevent/%s gunicorn/%s' % (gevent.__version__, + gunicorn.__version__), + 'SCRIPT_NAME': '', + 'wsgi.version': (1, 0), + 'wsgi.multithread': False, + 'wsgi.multiprocess': False, + 'wsgi.run_once': False} + + - base_env = { - 'GATEWAY_INTERFACE': 'CGI/1.1', - 'SERVER_SOFTWARE': 'gevent/%s gunicorn/%s' % (gevent.__version__, - gunicorn.__version__), - 'SCRIPT_NAME': '', - 'wsgi.version': (1, 0), - 'wsgi.url_scheme': 'http', - 'wsgi.multithread': False, - 'wsgi.multiprocess': True, - 'wsgi.run_once': False - } +class GEvent2Worker(Worker): + def __init__(self, *args, **kwargs): super(GEvent2Worker, self).__init__(*args, **kwargs) self.worker_connections = self.cfg.worker_connections - self.pool = None @classmethod def setup(cls): from gevent import monkey monkey.patch_all(dns=False) - - def handle_request(self, req): - self.pool.spawn(self.handle, req) - - def handle(self, req): - handle = WSGIHandler(req) - handle.handle(self) def run(self): self.socket.setblocking(1) - env = self.base_env.copy() + pool = Pool(self.worker_connections) - env.update({ - 'SERVER_NAME': self.address[0], - 'SERVER_PORT': str(self.address[1]) - }) - self.base_env = env + server = WSGIServer(self.socket, application=self.wsgi, + spawn=pool, handler_class=WSGIHandler) - http = core.http() - http.set_gencb(self.handle_request) - self.pool = Pool(self.worker_connections) - - self.application = self.wsgi - acceptor = gevent.spawn(http.accept, self.socket.fileno()) + acceptor = gevent.spawn(server.serve_forever) try: while self.alive: