2016-12-02 294 views
0

我正在用python寫一個倒計時時鐘,但它看起來像時間模塊只能下到第二個。有沒有辦法讓我準確確定何時完成了1秒?Python:如何將代碼的執行時間延長到1秒

似乎我的問題有點令人困惑,讓我澄清。我需要運行一些代碼,然後程序進入一個while循環,一旦代碼開始運行至少1000毫秒後退出

+0

你嘗試datetime模塊?具體檢查timedelta對象 – miraculixx

+0

[Timer](https://docs.python.org/3/library/threading.html#timer-objects)對象。 –

+0

由於我需要運行一些代碼,然後等待第二秒的剩餘時間過去,計時器並不會真正爲我所做的工作。我不想等一秒鐘,然後運行代碼,因爲那麼它將關閉 – user3246167

回答

1

如果您知道要運行需要不到1秒的代碼,然後1 - elapsed time會給你剩下的時間睡覺,不需要while循環。

now = time.time() 
foo() 
time.sleep(1 - (time.time() - now)) 

算術會有一些開銷,但它在一秒之內,並且嚴格大於1秒,如您所請求的。我跑到下面的代碼:

import time 
import random 

def foo(): 
    time.sleep(random.random()) 

now = time.time() 
foo() 
time.sleep(1 - (time.time() - now)) 

print "Time elapsed: {}".format(time.time() - now) 

輸出:

Time elapsed: 1.00379300117 

可以運行了幾次,以驗證它給你想要的輸出,無論foo需要多長時間。

除非花費時間超過1秒,否則睡眠時間將爲負值,這將導致IOError。你需要檢查這種情況。

或者,如果你需要的,如果1秒傳給殺功能,檢查this question

+0

謝謝!正是我需要的! – user3246167

0

默認情況下,time模塊爲您提供時間10^-5秒

import time 
time.time() 
>>> 1480643510.89443 
1

這裏是一個辦法,將工作,但林不知道哪個模塊你是有限的。

import time 

def procedure: 
    time.sleep(2.5) 

# measure wall time 
t0 = time.time() 
procedure() 
print time.time() - t0, "seconds wall time" 

2.50023603439秒壁時間

其中程序是您正在計時功能的引用。

相關問題