信号.setitimer,时间为零,后跟信号暂停不起作用



我有以下代码,它按预期工作:

import signal
def printer(signum, frame):
print("hi!")
signal.signal(signal.SIGALRM, printer)
signal.setitimer(signal.ITIMER_REAL, 0.1, 3.0)
while(True):
signal.pause()

我想使用signal.setitimer(signal.ITIMER_REAL, 0.0, 3.0),但要计时器正确启动它需要一点等待:signal.setitimer(signal.ITIMER_REAL, 0.1, 3.0).这是怎么回事?有没有办法立即启动计时器?

(仅适用于 Linux(

signal.setitimer的文档说,如果seconds参数为 0,这将清除计时器:

setitimer(其中, 秒, 间隔=0.0,/( 给定 itimer 的集合(ITIMER_REAL、ITIMER_VIRTUAL 或 ITIMER_PROF 之一(。 计时器将在值秒后触发,之后每隔几秒触发一次。 可以通过将秒设置为零来清除 itimer 。 以元组形式返回旧值:(延迟、间隔(。

这反映了基础 POSIX 系统调用的行为:

it_value设置为 0 将禁用计时器,而不考虑it_interval的值。

在 POSIX 系统上,it_value是一个时间帧结构,其精度以微秒为单位。因此,如果你可以容忍计时器第一次触发之前非常小的延迟,只需使用一个非常小的数字(小至 1 微秒(的参数调用 setitimer:

signal.setitimer(signal.ITIMER_REAL, 0.000001, 3.0(

最新更新