Python Glossary English

все 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Сообщить о неточности