2017-06-19 139 views
-1

我想一個函數開始到分鐘的第一秒運行的第一秒運行,但我不能做到這一點 這是我的代碼功能開始在分鐘

import datetime 
now = datetime.datetime.now() 
while not (now.second == "01"):now = datetime.datetime.now() 
+0

你是指什麼在一分鐘的第一秒跑?你的意思是每分鐘運行一次? – depperm

+0

這裏有很多沒有解釋。最終目標是什麼? – pstatix

回答

1
import time 
while True: 
    if time.strftime("%S") == "01": 
     #Run Your Code 
     time.sleep(59) 
1

這將砸向你的系統像瘋了似的,給它一點呼吸的空間:

import time 

while True: 
    current_seconds = time.gmtime().tm_sec 
    if current_seconds == 1: 
     print("The first second of a minute...") 
    time.sleep(0.9) # wait at least 900ms before checking again 

您可以進一步通過計算多少時間,你又開始檢查前要等待精簡它 - 如果你有興趣在在第一秒鐘內,您可以安全入睡,直到一分鐘結束。

2

您的代碼不起作用,因爲您將一個數字(now.second)與字符串"01"進行比較。在Python編號和它們的字符串表示方式並不相同(不像其他一些編程語言),所以這不會起作用。

嘗試與1比較(或者如果您真的想要一分鐘的話,可以輸入0)。也許不是忙碌循環(在等待時將使用您的CPU的全部核心),您應該使用time.sleep來等待下一分鐘的開始。

import datetime 
import time 

now = datetime.datetime.now() 
sec = now.second 
if sec != 0: 
    time.sleep(60-sec) 
# it should be (close to) the top of the minute here! 

隨着時間的計算機上打交道時,因爲你的程序可能會與在任何時刻(更可能,如果你的CPU是非常繁忙)由操作系統上運行被推遲總是有一些不可預測性。雖然我不太擔心,但可能會非常接近正確的時間。