все Python 3Linux · macOSsignalфункция
signal.siginterrupt()
обработчики
Задаёт, прерывать ли системные вызовы при сигнале signalnum или перезапускать их. Только Unix (Linux, macOS).
Синтаксис
signal.siginterrupt(signalnum, flag)
С Python 3.5 (PEP 475) интерпретатор сам повторяет прерванные вызовы вроде read и sleep, если обработчик не поднял исключение, поэтому в Python-коде эффект почти незаметен. Каждый signal.signal заново включает прерывание для своего сигнала, так что siginterrupt нужно звать после установки обработчика, а не до. Чтобы прервать ожидание, обработчик должен поднять исключение.
Примеры
import signal, time
got = []
old = signal.signal(signal.SIGALRM, lambda s, f: got.append(s))
signal.siginterrupt(signal.SIGALRM, False) # после signal.signal, не до
signal.setitimer(signal.ITIMER_REAL, 0.01)
time.sleep(0.05) # сон не оборвался: Python повторяет вызов сам
signal.setitimer(signal.ITIMER_REAL, 0)
signal.signal(signal.SIGALRM, old)
print(got == [signal.SIGALRM]) # → True
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности