2012-09-27 24 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