Многие системные вызовы могут быть прерваны входящим сигналом. Если программист хочет, чтобы вызов всё же был выполнен, ему нужно повторить его снова.
Яркий пример — функция sleep(x)
, которая должна "заморозить" программу на x
секунд, но на практике может завершиться раньше, если появится сигнал.
Однако, начиная с Python 3.5, благодаря PEP 475, Python автоматически обрабатывает все такие вызовы. Следующая программа завершится при первом полученном SIGINT
в любой версии Python до 3.5. Но в Python 3.5+ она будет спать ровно 5 секунд, независимо от сигналов.
import signal
import time
def signal_handler(signal, frame):
print('Caught')
signal.signal(signal.SIGINT, signal_handler)
time.sleep(5)
👉@BookPython
>>Click here to continue<<