gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:11:01 32 4
gpt4 key购买 nike

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

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(which, seconds, interval=0.0, /)    Sets given itimer (one of ITIMER_REAL, ITIMER_VIRTUAL or ITIMER_PROF).    The timer will fire after value seconds and after that every interval seconds.    The itimer can be cleared by setting seconds to zero.    Returns old values as a tuple: (delay, interval).

这反射(reflect)了底层 POSIX 的行为 setitimer系统调用:

Setting it_value to 0 shall disable a timer, regardless of the value of it_interval. 

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

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

关于python - signal.setitimer 时间为零,后跟 signal.pause 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58220408/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com