猿问

时间为零的signal.setitimer,后跟signal.pause不起作用

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


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)


四季花海
浏览 84回答 1
1回答

素胚勾勒不出你

的文档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)
随时随地看视频慕课网APP

相关分类

Python
我要回答