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 sys
from datetime import datetime
import time
# workaround on osx, disable kqueue
if sys.platform == "darwin":
@ -77,9 +78,21 @@ class GeventWorker(AsyncWorker):
pass
try:
# Try to stop connections until timeout
self.notify()
server.stop(timeout=self.cfg.graceful_timeout)
# Stop accepting requests
server.kill()
# 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:
pass