все Python 3Linux · macOSsignalфункция
signal.alarm()
таймеры
Просит ОС прислать SIGALRM через заданное число целых секунд; alarm(0) отменяет. Только Unix (Linux, macOS).
Синтаксис
remaining = signal.alarm(seconds)
Будильник один на процесс: новый вызов отменяет прежний и возвращает, сколько секунд ему оставалось, — две библиотеки с alarm ломают друг друга. Без своего обработчика SIGALRM просто убивает процесс. Точность — целые секунды, для долей есть setitimer. Отмену alarm(0) ставьте в finally: забытый будильник сработает посреди совсем другого кода.
Примеры
import signal
print(signal.alarm(5)) # → 0 — будильника не было
print(signal.alarm(0)) # → 5 — отменили, оставалось 5 с
import signal
def on_alarm(signum, frame):
raise TimeoutError('слишком долго')
old = signal.signal(signal.SIGALRM, on_alarm)
signal.alarm(1)
try:
print(sum(range(1000))) # → 499500 — успели до будильника
finally:
signal.alarm(0)
signal.signal(signal.SIGALRM, old)
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности