mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
graceful stop for TornadoWorker
This commit is contained in:
parent
f43d299503
commit
e19af09d09
@ -31,15 +31,16 @@ class TornadoWorker(Worker):
|
|||||||
sys.modules["tornado.web"] = web
|
sys.modules["tornado.web"] = web
|
||||||
|
|
||||||
def handle_quit(self, sig, frame):
|
def handle_quit(self, sig, frame):
|
||||||
super(TornadoWorker, self).handle_quit(sig, frame)
|
if self.alive:
|
||||||
self.ioloop.stop()
|
super(TornadoWorker, self).handle_quit(sig, frame)
|
||||||
|
self.stop()
|
||||||
|
|
||||||
def handle_request(self):
|
def handle_request(self):
|
||||||
self.nr += 1
|
self.nr += 1
|
||||||
if self.alive and self.nr >= self.max_requests:
|
if self.alive and self.nr >= self.max_requests:
|
||||||
self.alive = False
|
self.alive = False
|
||||||
self.log.info("Autorestarting worker after current request.")
|
self.log.info("Autorestarting worker after current request.")
|
||||||
self.ioloop.stop()
|
self.stop()
|
||||||
|
|
||||||
def watchdog(self):
|
def watchdog(self):
|
||||||
if self.alive:
|
if self.alive:
|
||||||
@ -47,7 +48,7 @@ class TornadoWorker(Worker):
|
|||||||
|
|
||||||
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)
|
||||||
self.ioloop.stop()
|
self.stop()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.ioloop = IOLoop.instance()
|
self.ioloop = IOLoop.instance()
|
||||||
@ -82,6 +83,8 @@ class TornadoWorker(Worker):
|
|||||||
server = tornado.httpserver.HTTPServer(app,
|
server = tornado.httpserver.HTTPServer(app,
|
||||||
io_loop=self.ioloop)
|
io_loop=self.ioloop)
|
||||||
|
|
||||||
|
self.server = server
|
||||||
|
|
||||||
for s in self.sockets:
|
for s in self.sockets:
|
||||||
s.setblocking(0)
|
s.setblocking(0)
|
||||||
if hasattr(server, "add_socket"): # tornado > 2.0
|
if hasattr(server, "add_socket"): # tornado > 2.0
|
||||||
@ -94,3 +97,15 @@ class TornadoWorker(Worker):
|
|||||||
server.start(num_processes=1)
|
server.start(num_processes=1)
|
||||||
|
|
||||||
self.ioloop.start()
|
self.ioloop.start()
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
if hasattr(self, 'server'):
|
||||||
|
try:
|
||||||
|
self.server.stop()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
PeriodicCallback(self.stop_ioloop, 1000, io_loop=self.ioloop).start()
|
||||||
|
|
||||||
|
def stop_ioloop(self):
|
||||||
|
if not self.ioloop._callbacks and len(self.ioloop._timeouts) <= 1:
|
||||||
|
self.ioloop.stop()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user