如何在Python中自動測量函數的執行時間

2024-04-27 03:18:59 发布

您现在位置: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

所以基类需要处理测量时间的问题


Tags: toselftimedef时间基类dostart
3条回答

一种方法是使用decorator(PEP for decorators)(first of a series of tutorial articles on decorators)。这是一个你想要的例子。

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'

还有timeit,它是标准库的一部分,非常容易使用。记住:不要重新发明轮子!

您检查过"profile" module了吗?

也就是说,您确定需要实现自己的自定义框架,而不是使用该语言的默认分析机制吗?

你也可以用谷歌搜索“python hotshot”来寻找类似的解决方案。

相关问题 更多 >