python计时器之谜
至少对我来说是个谜。考虑以下事项:python计时器之谜,python,timer,signals,Python,Timer,Signals,至少对我来说是个谜。考虑以下事项: import time import signal def catcher(signum, _): print "beat!" signal.signal(signal.SIGALRM, catcher) signal.setitimer(signal.ITIMER_REAL, 2, 2) while True: time.sleep(5) 按预期工作,即每2秒发送一条“beat!”消息。接下来,不产生任何输出: import time
import time
import signal
def catcher(signum, _):
print "beat!"
signal.signal(signal.SIGALRM, catcher)
signal.setitimer(signal.ITIMER_REAL, 2, 2)
while True:
time.sleep(5)
按预期工作,即每2秒发送一条“beat!”消息。接下来,不产生任何输出:
import time
import signal
def catcher(signum, _):
print "beat!"
signal.signal(signal.SIGVTALRM, catcher)
signal.setitimer(signal.ITIMER_VIRTUAL, 2, 2)
while True:
time.sleep(5)
问题出在哪里?来自我的系统的man setitimer(强调我的): 系统为每个进程提供三个间隔计时器,每个计时器在不同的时域中递减。当任何计时器过期时,将向进程发送一个信号,并且计时器(可能)重新启动 ITIMER_REAL实时递减,并在到期时发送信号 ITIMER_VIRTUAL仅在进程执行时递减,并在到期时传递SIGVTALRM
您是否错过了您的进程在睡眠时没有执行?你需要花很长的时间来累积这个循环的实际使用时间。这个
信号。ITIMER\u VIRTUAL
只在进程运行时倒计时<代码>时间。睡眠(5)暂停进程,使计时器不递减。这对我来说似乎是一个很好的解释。执行time.sleep()
时,进程将挂起(即不执行)。如果您将其更改为“通过”,您的进程将执行并消耗时间。我真傻!!!以上只是一个快速测试,看看定时器信号是如何工作的。。。新手(信号)错误。谢谢您是否尝试过将第二个程序中的时间。sleep(5)
更改为pass
?