在Windows上使用Python 3.4.1时,我发现在执行异步事件循环(asyncio event loop)时,无法通过在终端中按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')
查看官方(Tulip)邮件列表中有关讨论的内容。