import signal signal.setitimer(which, seconds, interval=0.0) signal.getitimer(which)
which
- временной таймер,seconds
- время в секундах,interval=0.0
- интервал в секундах.(delay, interval)
.Функция signal.setitimer()
устанавливает передаваемый временной таймер, указанный в which
на активацию через seconds
секунд и каждые interval
секунд после этого. Таймер может быть стерт если передать 0 в аргументе seconds
.
Функция signal.getitimer()
возвращает текущее значение заданного интервала таймера, указанного в аргументе which
.
Аргумент which
принимает один из signal.ITIMER_REAL
, signal.ITIMER_VIRTUAL
, signal.ITIMER_PROF
.
Аргумент seconds
может принимать float
, в отличии от функции signal.alarm()
.
Когда таймер срабатывает, сигнал посылается процессу. Посылаемый сигнал зависит от таймера который используется:
signal.ITIMER_REAL
будет посылать signal.SIGALRM
, signal.ITIMER_VIRTUAL
посылает signal.SIGVTALRM
, signal.ITIMER_PROF
будет посылать сигнал signal.SIGPROF
.Старые значения возвращаются в виде кортежа (delay, interval)
.
Попытка передачи недействительного значения интервала таймера вызовет исключение ItimerError
.
Доступность: Unix.
import signal, time def timer(): return time.strftime('%H:%M:%S', time.localtime()) def handle(signum, frame): print(f'{timer()} -> Получение сигнала') signal.signal(signal.SIGALRM, handle) signal.setitimer(signal.ITIMER_REAL, 5, 1) for i in range (10): time.sleep(0.5) if i == 5: print(f'{timer()} -> Засыпаем...') itimer = signal.getitimer(signal.ITIMER_REAL) print(f'Итерация продолжиться через => {itimer[0]}') signal.pause() print(i) # 0 # 1 # 2 # 3 # 4 # 16:20:28 -> Засыпаем... # Итерация продолжиться через => 1.996372 # 16:20:30 -> Получение сигнала # 5 # 6 # 16:20:31 -> Получение сигнала # 7 # 8 # 16:20:32 -> Получение сигнала # 9