的正常关机,我用下面的代码来关闭我的龙卷风应用优雅(从https://gist.github.com/wonderbeyond/d38cd85243befe863cdde54b84505784拍摄):龙卷风IOLoop
def sig_handler(servers, sig, frame):
io_loop = tornado.ioloop.IOLoop.instance()
def stop_loop(deadline):
now = time.time()
if now < deadline and (io_loop._callbacks or io_loop._timeouts):
logging.info('Waiting for next tick')
print("CALL BACKS")
print(io_loop._callbacks)
print("TIMEOUTS")
print(io_loop._timeouts)
io_loop.add_timeout(now + 1, stop_loop, deadline)
else:
io_loop.stop()
logging.info("Shutting down.")
def shutdown():
logging.info("Stopping http servers")
# servers is a list of servers to stop
for s in servers:
s.stop()
logging.info("Will shutdown in %s seconds ...",
MAX_WAIT_SEC_BEFORE_SHUTDOWN)
stop_loop(time.time() + MAX_WAIT_SEC_BEFORE_SHUTDOWN)
logging.warning("Caught signal: %s", sig)
io_loop.add_callback_from_signal(shutdown)
我设置MAX_WAIT_SEC_BEFORE_SHUTDOWN为10秒。即使在关闭http服务器之后,每次都需要10秒钟才能关闭服务器。我注意到,有总是在io_loop._timeouts
列表E.g项目:
[<tornado.ioloop._Timeout object at 0x106b90408>, <tornado.ioloop._Timeout object at 0x106b904c8>, ...]
什么是io_loop._timeouts
的项目?我应该期望这是一个空的列表,还是我没有阻止我应该拥有的东西?
这个关机程序是否正常?任何人都可以建议其他代码
谢谢本,一如既往非常翔实的答案。干杯 –