Python Glossary English

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