2012-09-27 53 views
3

我是Python新手。這是我的第一個解釋性語言。到目前爲止,我曾經學習過Java。 所以,當Java程序第一次運行時,它的執行速度比下一次慢。 reasi正在緩存。基準Python程序

import time 

def procedure(): 
    time.sleep(2.5) 

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

我試了幾次。結果總是平等的。那麼,我認爲沒有cashe干涉,基準是非常可靠的嗎?

回答

5

可以做這樣的基準測試,對於運行「很長」且相當穩定的函數,精度足夠好,就像在你的例子中一樣。但有一些缺陷:對於「快速」功能(如空白功能),您會遇到精度限制。對於執行時間不同的函數(例如網絡I/O),您必須多次測量才能找到最小/最大/平均運行時間。 除此之外,最佳使用的時鐘在平臺上有所不同:在windows上,time.clock()是首選,在* nix,time.time()上。

幸運的是,這需要的一切護理模塊:timeit

>>> import time 
>>> def procedure(): 
    pass 

>>> def time_this(f): 
    t0=time.clock() 
    f() 
    print((time.clock() - t0), "seconds process time") 


>>> time_this(procedure) 
1.9555558310457855e-06 seconds process time 
>>> time_this(procedure) 
1.9555557742023666e-06 seconds process time 
>>> time_this(procedure) 
1.9555557742023666e-06 seconds process time 
>>> import timeit 
>>> timeit.Timer(procedure).timeit() 
0.09460783423588737 
>>> timeit.Timer(procedure).repeat() 
[0.09791419021132697, 0.09721947901198291, 0.09598943441130814] 

你可能想看看它的來源。或者只是使用它;)

至於緩存:python代碼編譯爲第一次使用時的字節碼。這個字節碼是默認緩存的 - 但這不會影響你的基準測試,只要你不在你的函數中執行import