notify before stopping.

This commit is contained in:
benoitc 2010-09-01 10:28:14 +02:00
parent 5ff6cd173f
commit c41d3edd36

View File

@ -8,11 +8,10 @@ from __future__ import with_statement
import os import os
import gevent import gevent
from gevent import monkey
monkey.noisy = False
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
@ -37,9 +36,8 @@ class GGeventServer(StreamServer):
self.handle_func = handle self.handle_func = handle
self.worker = worker self.worker = worker
def stop(self): def stop(self, timeout=None):
super(GGeventServer, self).stop() super(GGeventServer, self).stop(timeout=timeout)
self.worker.alive = False
def handle(self, sock, addr): def handle(self, sock, addr):
self.handle_func(sock, addr) self.handle_func(sock, addr)
@ -52,6 +50,7 @@ class GeventWorker(AsyncWorker):
@classmethod @classmethod
def setup(cls): def setup(cls):
from gevent import monkey from gevent import monkey
monkey.noisy = False
monkey.patch_all() monkey.patch_all()
def timeout_ctx(self): def timeout_ctx(self):
@ -72,12 +71,14 @@ class GeventWorker(AsyncWorker):
if self.ppid != os.getppid(): if self.ppid != os.getppid():
self.log.info("Parent changed, shutting down: %s" % self) self.log.info("Parent changed, shutting down: %s" % self)
break break
gevent.sleep(self.timeout) gevent.sleep(0.1)
# Try to stop connections until timeout
self.notify()
server.stop(timeout=self.timeout)
except: except:
pass pass
with gevent.Timeout(self.timeout, False):
gevent.spawn(server.stop).join()
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
@ -106,6 +107,7 @@ class GeventBaseWorker(Worker):
def setup(cls): def setup(cls):
from gevent import monkey from gevent import monkey
monkey.patch_all() monkey.patch_all()
def run(self): def run(self):
self.socket.setblocking(1) self.socket.setblocking(1)