可能重复:
Accurate timing of functions in python
accurately measure time python function takes
我如何测量和比较我在python中编写的算法的运行时间。如果可以的话,还可以指向一个很好的算法站点/论坛,如stackoverflow。
答案 0 :(得分:24)
模块timeit
对此非常有用,并且包含在标准Python发行版中。
示例:
import timeit
timeit.Timer('for i in xrange(10): oct(i)').timeit()
答案 1 :(得分:23)
对于小算法,您可以使用模块timeit 来自python文档:
def test():
"Stupid test function"
L = []
for i in range(100):
L.append(i)
if __name__=='__main__':
from timeit import Timer
t = Timer("test()", "from __main__ import test")
print t.timeit()
不太准确但仍然有效,您可以像这样使用模块时间:
from time import time
t0 = time()
call_mifuntion_vers_1()
t1 = time()
call_mifunction_vers_2()
t2 = time()
print 'function vers1 takes %f' %(t1-t0)
print 'function vers2 takes %f' %(t2-t1)
答案 2 :(得分:21)
我不是100%确定“用python编写的算法的运行时间”是什么意思,所以我想我可能会尝试更广泛地看一些可能的答案。
算法没有运行时间;实现可以定时,但算法是一种抽象的方法来做某事。优化程序最常见且最有价值的部分是analyzing the algorithm,通常使用渐近分析并计算big O时间,空间,磁盘使用等方面的复杂性。
计算机无法真正为您执行此步骤。这需要进行数学计算以确定某些方法的工作原理。优化这方面的事情是实现可扩展性能的主要组成部分。
您可以计算具体实施时间。在Python中执行此操作的最佳方法是使用timeit。最想要使用的方法是创建一个带有函数的模块,该函数封装了您要调用的内容,并使用python -m timeit ...
从命令行调用它。
使用timeit在进行微优化时比较多个片段,但通常不是比较两种不同算法所需的正确工具。通常你想要的是渐近分析,但你可能想要更复杂的分析类型。
您必须知道时间。 大多数代码段都不值得改进。当你进行微优化并且没有提高算法的渐近复杂度时,你需要在它们实际计数的地方进行更改,尤其是 。
如果你的代码花费1%的时间花费的功能的四倍,那不是真正的加速。如果你的程序在50%的时间内花费了20%的速度增加,你就会获得真正的收益。
要确定真正的Python程序所花费的时间,请使用stdlib profiling utilities。这将告诉您代码花费时间的示例程序中的位置。
答案 3 :(得分:13)
使用装饰器测量函数的执行时间非常方便。 http://www.zopyx.com/blog/a-python-decorator-for-measuring-the-execution-time-of-methods有一个例子。
下面我已经无耻地粘贴了上面提到的网站上的代码,以便在网站上删除该网站的示例存在。
import time
def timeit(method):
def timed(*args, **kw):
ts = time.time()
result = method(*args, **kw)
te = time.time()
print '%r (%r, %r) %2.2f sec' % \
(method.__name__, args, kw, te-ts)
return result
return timed
class Foo(object):
@timeit
def foo(self, a=2, b=3):
time.sleep(0.2)
@timeit
def f1():
time.sleep(1)
print 'f1'
@timeit
def f2(a):
time.sleep(2)
print 'f2',a
@timeit
def f3(a, *args, **kw):
time.sleep(0.3)
print 'f3', args, kw
f1()
f2(42)
f3(42, 43, foo=2)
Foo().foo()
//约翰
答案 4 :(得分:0)
编程语言并不重要;无论语言如何,测量算法的运行时复杂度都以相同的方式工作。 Analysis of Algorithms Stanford Google Code University timeit是教你自己如何分析算法和代码的运行时复杂性的非常好的资源。
如果您只想测量函数或代码段在Python中运行所用的时间,那么您可以使用time或{{3}}模块,具体取决于代码需要运行。