pyzmq Tornado ioloop: 如何优雅处理KeyboardInterrupt?
我可以在我的pyzmq事件循环中捕捉到键盘中断(KeyboardInterrupt):
try:
ioloop.IOLoop.instance().start()
except KeyboardInterrupt:
pass
但是这样做只是让事件循环突然停止。我想要在检测到键盘中断后,手动关闭事件循环,并进行一些清理工作。请问我该怎么做呢?
1 个回答
6
使用 signal
模块来处理 SIGINT
信号:
import signal
from tornado.ioloop import IOLoop
def on_shutdown():
print('Shutting down')
IOLoop.instance().stop()
if __name__ == '__main__':
ioloop = IOLoop.instance()
signal.signal(signal.SIGINT, lambda sig, frame: ioloop.add_callback_from_signal(on_shutdown))
ioloop.start()