Merge pull request #385 from sirkonst/graceful_timeout

Fix graceful shutdown for gevent.
This commit is contained in:
Benoit Chesneau 2012-08-26 12:48:44 -07:00
commit ab5473be92

View File

@ -8,6 +8,7 @@ from __future__ import with_statement
import os import os
import sys import sys
from datetime import datetime from datetime import datetime
import time
# workaround on osx, disable kqueue # workaround on osx, disable kqueue
if sys.platform == "darwin": if sys.platform == "darwin":
@ -77,9 +78,21 @@ class GeventWorker(AsyncWorker):
pass pass
try: try:
# Try to stop connections until timeout # Stop accepting requests
self.notify() server.kill()
server.stop(timeout=self.cfg.graceful_timeout)
# Handle current requests until graceful_timeout
ts = time.time()
while time.time() - ts <= self.cfg.graceful_timeout:
if server.pool.free_count() == server.pool.size:
return # all requests was handled
self.notify()
gevent.sleep(1.0)
# Force kill all active the handlers
self.log.warning("Worker graceful timeout (pid:%s)" % self.pid)
server.stop(timeout=1)
except: except:
pass pass