簡體   English   中英

python計時器之謎

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM