Используя Python 3.4.1 в Windows, я обнаружил, что при выполнении цикла событий asyncio моя программа не может быть прервана ( т.е. нажатием Ctrl + C в терминале). Более того, сигнал SIGINT игнорируется. И наоборот, я решил, что SIGINT обрабатывается, если не в цикле событий.
Почему SIGINT игнорируется при выполнении цикла событий asyncio?
Следующая программа должна продемонстрировать проблему - запустите ее в терминале и попытайтесь остановить ее, нажав 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).