[英]python timer mystery
好吧,至少對我來說是一個謎。 考慮以下:
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秒。 接下來,沒有產生輸出:
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 實時遞減 ,並在到期時提供SIGALRM。
ITIMER_VIRTUAL 僅在進程執行時遞減 ,並在到期時發送SIGVTALRM。
您是否只是想念您的過程在睡覺時沒有執行? 你需要花費很長時間才能在這個循環中累積實際使用的時間。
signal.ITIMER_VIRTUAL
僅在進程正在運行時倒計時。 time.sleep(5)
暫停進程,以便計時器不會遞減。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.