2013-07-05 85 views
4

我正在運行Mac OS X 10.8,並獲取time.clock()的奇怪行爲,一些在線消息來源說,我應該比time.time()更喜歡計時代碼。例如:爲什麼Mac OS X上的Python time.time()和time.clock()存在差異?

import time  
t0clock = time.clock() 
t0time = time.time() 
time.sleep(5) 
t1clock = time.clock() 
t1time = time.time() 
print t1clock - t0clock 
print t1time - t0time 

0.00330099999999 <-- from time.clock(), clearly incorrect 
5.00392889977 <-- from time.time(), correct 

爲什麼會發生這種情況?我應該使用time.time()進行可靠的估計嗎?

回答

7

從文檔上time.clock

在Unix,返回當前處理器時間以秒錶示的浮點數。精確性,實際上「處理器時間」含義的定義取決於具有相同名稱的C函數的精確性,但無論如何,這是用於基準測試Python或時序算法的函數。

從文檔上time.time

返回從epoch作爲浮點數以秒的時間。請注意,即使時間總是以浮點數形式返回,但並非所有系統的時間精度都比1秒高。雖然此函數通常返回非遞減值,但如果系統時鐘已在兩次調用之間回退,則它可以返回比先前調用更低的值。

time.time()以秒爲單位的度量,time.clock()度量當前進程使用的CPU時間量。但在windows上,這與clock()也是秒錶。

Here's a similar question

+0

它有助於理解蟒蛇的某些部分(尤其是日期/時間函數)都只是很薄的周圍存在於操作系統的「傳統」電話包裝。並且這些因平臺而異...... –

7

而不是使用time.timetime.clock使用timeit.default_timer的。這將返回time.clocksys.platform == "win32"time.time所有其他平臺。

這樣,您的代碼將使用計時器的最佳選擇,而不受平臺影響。


從timeit.py:

if sys.platform == "win32": 
    # On Windows, the best timer is time.clock() 
    default_timer = time.clock 
else: 
    # On most other platforms the best timer is time.time() 
    default_timer = time.time 
+0

當然,但是您不會在測量時間內出現差異。 –

+0

@MartijnPieters:Haidro已經解釋了這一部分。 – unutbu

0

time.time()返回 「掛鐘」 時間。

time.clock()返回處理器使用的時間,如果您調用time.sleep()表示您沒有使用處理器,則該進程只是在計時器決定給進程返回cpu之前才進行計劃(除了在窗口返回「wall時鐘時間)。

看到了這個問題:time.h clock() broken on OS X?

相關問題