簡易方法也會被改變pass
爲sleep (1)
這將大大緩解CPU的壓力,但在運行缺少零秒,如果由於某種原因,你得到12:30:59.99999
其次12:31:01.00001
的風險。
你可以選擇一個兩階段的方式。雖然有三秒鐘以上的時間,但請根據時間長短等待更長的時間。否則,等待一秒鐘。
類似如下的功能齊全的Python程序將說明我的意思:
from datetime import datetime
from time import sleep
def WaitForNextMinute():
secs = datetime.utcnow().second
while secs < 57:
sleep (57 - secs)
secs = datetime.utcnow().second
while datetime.utcnow().second >= 57:
sleep (1)
while True:
WaitForNextMinute()
print datetime.utcnow()
輸出我的系統是:
2012-08-25 04:16:00.111257
2012-08-25 04:17:00.157155
2012-08-25 04:18:00.217356
2012-08-25 04:19:00.270348
2012-08-25 04:20:00.330203
2012-08-25 04:21:00.390318
2012-08-25 04:22:00.450440
2012-08-25 04:23:00.510491
2012-08-25 04:24:00.570487
2012-08-25 04:25:00.630502
2012-08-25 04:26:00.690523
2012-08-25 04:27:00.750642
2012-08-25 04:28:00.810780
2012-08-25 04:29:00.870900
2012-08-25 04:30:00.931078
這是一個很值得你追求的。
此功能將基本上做一個等待,讓你非常接近分鐘結束,然後醒來每一秒,直到週期結束。
因此,例如,讓我們說這是12:21:13
。由於secs
低於57
,它會等待57 - 13
或足以讓你達到約12:21:57
。
從那裏,它將一次只睡一秒,直到second
變得小於57
。換句話說,當我們進入下一分鐘時。
通過做這種方式,而不是試圖檢測零秒,也繞過失蹤一分鐘的可能性。
而且,如果您想確保儘可能接近分鐘翻轉,可以用pass
代替sleep (1)
。這樣,你可以在60分鐘內完成最多三秒鐘的完全CPU咕嚕聲(平均5%),並儘可能接近分鐘翻轉。
當我執行稍加修改,我得到:
2012-08-25 05:48:00.000003
2012-08-25 05:49:00.000003
2012-08-25 05:50:00.000003
2012-08-25 05:51:00.000004
2012-08-25 05:52:00.000004
2012-08-25 05:53:00.000004
2012-08-25 05:54:00.000003
2012-08-25 05:55:00.000004
請注意,time.sleep()不保證具有毫秒精度;它取決於底層OS睡眠功能的準確性。典型精度爲〜10ms(對於Windows)或〜1ms(對於Linux)。 –
你是對的;在某些平臺上它不是1ms。我編輯了匹配的答案。 – nneonneo
感謝這個片段,大概是我打算做的事情,但想要快速完整的檢查。 – Zeb