在 Windows 上使用 Python 3.4.1,我发现在执行asyncio 事件循环时,我的程序不能被中断(即在终端中按 Ctrl+C)。更重要的是,SIGINT 信号被忽略。相反,我已经确定 SIGINT 在不在事件循环中时被处理。
为什么在执行异步事件循环时忽略 SIGINT?
下面的程序应该演示这个问题 - 在终端中运行它并尝试通过按 Ctrl+C 来停止它,它应该继续运行:
import asyncio
import signal
# Never gets called after entering event loop
def handler(*args):
print('Signaled')
signal.signal(signal.SIGINT, handler)
print('Event loop starting')
loop = asyncio.SelectorEventLoop()
asyncio.set_event_loop(loop)
loop.run_forever()
print('Event loop ended')
请参阅官方(郁金香)邮件列表上的讨论。