rather than sleeping the timeout, just test if time is elapsed, then

notify. Speed graceful reload and exit.
This commit is contained in:
benoitc 2010-12-12 22:57:50 +01:00
parent 7ac83b918e
commit 2e39db265c
2 changed files with 26 additions and 6 deletions

View File

@ -7,6 +7,8 @@ from __future__ import with_statement
import os
import time
try:
import eventlet
except ImportError:
@ -38,12 +40,17 @@ class EventletWorker(AsyncWorker):
self.acceptor = eventlet.spawn(eventlet.serve, self.socket,
self.handle, self.worker_connections)
t = time.time()
while self.alive:
self.notify()
if time.time() >= t:
self.notify()
t = time.time() + self.timeout
if self.ppid != os.getppid():
self.log.info("Parent changed, shutting down: %s" % self)
break
eventlet.sleep(self.timeout)
eventlet.sleep(0.1)
self.notify()
with eventlet.Timeout(self.timeout, False):

View File

@ -7,6 +7,7 @@ from __future__ import with_statement
import os
import sys
import time
# workaround on osx, disable kqueue
if sys.platform == "darwin":
@ -72,13 +73,19 @@ class GeventWorker(AsyncWorker):
worker=self)
server.start()
t = time.time()
try:
while self.alive:
self.notify()
if time.time() >= t:
self.notify()
t = time.time() + self.timeout
if self.ppid != os.getppid():
self.log.info("Parent changed, shutting down: %s" % self)
break
gevent.sleep(self.timeout)
gevent.sleep(0.1)
except KeyboardInterrupt:
pass
@ -131,14 +138,20 @@ class GeventBaseWorker(Worker):
server = self.server_class(self.socket, application=self.wsgi,
spawn=pool, handler_class=self.wsgi_handler)
server.start()
t = time.time()
try:
while self.alive:
self.notify()
if time.time() >= t:
self.notify()
t = time.time() + self.timeout
if self.ppid != os.getppid():
self.log.info("Parent changed, shutting down: %s" % self)
break
gevent.sleep(self.timeout)
# sleep
gevent.sleep(0.1)
except KeyboardInterrupt:
pass