2013-06-04 138 views
2

什么是最好的(准确)的方式来衡量的功能时执行,例如:测量时间执行

def some_function(): 
    # ... 

我宁愿调用此函数1000次,然后计算平均时间,是这样的:

start = time.time() 

for i in range(1000): 
    some_function() 

elapsed = (time.time() - start)/1000 

但也许有更好的办法吗?

+0

使用timeit模块是我recomendation ... –

+1

CPROFILE也非常丰富......但没有做很你想要的这里 –

回答

4

您应该使用timeit模块,我认为

import timeit 
t = timeit.Timer('some_function(*args)', # code to run 
       'from __main__ import some_function, args') # initial code 
               #run before time measurement 
t.timeit(100) # times to run 
+0

但什么时候我some_function有一个参数,我想称之为'some_function (some_object)'? –

+0

你应该在初始块中准备它,并在时间模块中使用它,我认为 – oleg

1

我同意timeit是事实上的“模块”来运行Python源本地定时。然而,如果你有兴趣在分析方面做一些繁重的工作,你可能会发现像runnakerun这样有用的工具(Python本身的一个可视化工具)。

从runsnakerun一个片段(这真的只是从蟒蛇Profiler使用数据):

排序为原始档案信息数据网格视图

标识:函数名称,文件名,目录名称

时间花费:累积性,累积性的每次,本地和本地每时间

整体数据网格视图

(全部)的呼叫者-的-此功能,(全部)被呼叫者-的 - 该功能查看

只是为了增加是的,我知道“主义......你要的东西简单,这是后在上面。但是,我想我会分享另一种可能的解决方案,以防您需要更多信息。如果你不觉得有用,也许别人会!

为了得到一个输出配置文件,将在runsnakerun跑,冒这样的:

$ python -m cProfile -o <outputfilename> <script-name> <options> 

另外,如果你在* nix的发展可以用time,但现在你已经开销增加,并可能失去一些精确度Python模块timeit可能提供。

不同的需求需要不同的解决方案 - 只需添加到你的袋子技巧。

HTH