15

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) メーリング リストの議論を参照してください。

4

3 に答える 3