mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
Merge pull request #385 from sirkonst/graceful_timeout
Fix graceful shutdown for gevent.
This commit is contained in:
commit
ab5473be92
@ -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
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user