如何在Python中自动测量函数的执行时间

par*_*ars 28 python oop

我需要有一个基类,我将用它来继承其他类,我想测量其函数的执行时间.

因此,这一翻译的有这样的事情:

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
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

class Worker(BaseClass):
    def doSomething(self):
        ... do something

#outputs the same: doSomething() took XX time to finish
Run Code Online (Sandbox Code Playgroud)

所以BaseClass需要处理测量时间

Geo*_*edy 50

一种方法是使用装饰器( 装饰器的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
Run Code Online (Sandbox Code Playgroud)

这是其使用的一个例子

@timed
def somefunction(countto):
  for i in xrange(countto):
    pass
  return "Done"
Run Code Online (Sandbox Code Playgroud)

为了说明它是如何工作的,我从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'
Run Code Online (Sandbox Code Playgroud)


p.m*_*ino 10

你检查了"配置文件"模块吗?

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

您也可以谷歌为"python hotshot"获得类似的解决方案.


jat*_*ism 6

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