Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python计时器之谜_Python_Timer_Signals - Fatal编程技术网

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