Windows で Python 3.4.1 を使用して、asyncio イベント ループの実行中にプログラムを中断できないことがわかりました (つまり、ターミナルで Ctrl+C を押しても)。さらに言えば、SIGINT シグナルは無視されます。逆に言えば、イベント ループでない場合は SIGINT が処理されると判断しました。
asyncio イベントループの実行時に 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) メーリング リストの議論を参照してください。