如何在Python中自动测量函数执行时间
我需要一个基类,这个基类将用来让其他类继承,我想要测量这些类中函数的执行时间。
所以我不想要像这样:
class Worker():
def doSomething(self):
start = time.time()
... do something
elapsed = (time.time() - start)
print "doSomething() took ", elapsed, " time to finish"
#outputs: doSomething() took XX time to finish
我想要的是像这样:
class Worker(BaseClass):
def doSomething(self):
... do something
#outputs the same: doSomething() took XX time to finish
所以这个基类需要负责测量时间。
3 个回答
6
还有一个叫做 timeit 的工具,它是Python自带的库,使用起来非常简单。记住:别重复造轮子!
10
你有没有查看过“profile”模块?
也就是说,你确定需要自己做一个特别的框架,而不是直接用这个语言自带的性能分析工具吗?
你也可以在网上搜索“python hotshot”,看看有没有类似的解决方案。
65
一种实现这个功能的方法是使用装饰器,具体可以参考这个关于装饰器的PEP文档,还有这篇关于装饰器的系列教程文章。下面是一个可以满足你需求的例子。
from functools import wraps
from time import time
def timed(f):
@wraps(f)
def wrapper(*args, **kwds):
start = time()
result = f(*args, **kwds)
elapsed = time() - start
print "%s took %d time to finish" % (f.__name__, elapsed)
return result
return wrapper
这是它使用的一个例子
@timed
def somefunction(countto):
for i in xrange(countto):
pass
return "Done"
为了展示它是如何工作的,我在Python的命令行中调用了这个函数:
>>> timedec.somefunction(10000000)
somefunction took 0 time to finish
'Done'
>>> timedec.somefunction(100000000)
somefunction took 2 time to finish
'Done'
>>> timedec.somefunction(1000000000)
somefunction took 22 time to finish
'Done'