我有以下代码,它按预期工作:import signaldef 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)
1 回答
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
的文档signal.setitimer说,如果secondsarg 为 0,这将清除计时器:
setitimer(which, seconds, interval=0.0, /)
设置给定的计时器(ITIMER_REAL、ITIMER_VIRTUAL 或 ITIMER_PROF 之一)。
计时器将在 value 秒后触发,之后每隔间隔秒触发一次。
可以通过将秒数设置为零来清除计时器。
将旧值作为元组返回:(延迟,间隔)。
这反映了底层 POSIX setitimer系统调用的行为:
将it_value设置为 0 将禁用计时器,无论it_interval的值如何。
在 POSIX 系统上,it_value 是一个timeval 结构,其精度以微秒为单位。因此,如果您可以在计时器第一次触发之前容忍非常小的延迟,只需使用非常小的参数调用 setitimer,小到 1 微秒:
signal.setitimer(signal.ITIMER_REAL, 0.000001, 3.0)
添加回答
举报
0/150
提交
取消