Почему вызов print в Python-обработчике сигнала может уронить программу

Is it safe to call print in a Python signal handler?

Автор разбирает, безопасно ли вызывать print в обработчике сигнала Python. Хотя CPython откладывает выполнение пользовательского обработчика до безопасного момента, обработчики сигналов Python неожиданно реентерабельны: если сигнал приходит во время выполнения обработчика, он может быть вызван повторно. Стресс-тест с быстрой серией сигналов показывает, что в экстремальных условиях это приводит к RuntimeError из-за повторного входа в буферизованный вывод. Автор подчеркивает, что на практике это вряд ли случится, но советует избегать нетривиальных операций в обработчиках.

Если сигнал приходит, пока выполняется обработчик сигнала Python, обработчик может быть вызван снова в середине первого вызова.

Ещё за этот день

2026-08-30