Skip to main content
 首页 » 编程设计

python之pyzmq Tornado ioloop : how to handle KeyboardInterrupt gracefully

2025年05月04日16soundcode

我可以在我的 pyzmq 事件循环中捕获一个 KeyboardInterrupt:

try: 
    ioloop.IOLoop.instance().start() 
except KeyboardInterrupt: 
    pass 

但这只会突然停止 ioloop。我想检测 KeyboardInterrupt 并在清理后手动关闭 ioloop。我该怎么做?

请您参考如下方法:

使用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()