我有以下代码,它按预期工作:
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(