代码之家  ›  专栏  ›  技术社区  ›  pars

如何在Python中(自动)度量函数的执行时间

  •  28
  • pars  · 技术社区  · 16 年前

    我需要一个 基类

    所以 有这样的东西:

    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 回复  |  直到 16 年前
        1
  •  59
  •   Geoff Reedy    16 年前

    (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'
    
        2
  •  10
  •   p.marino    16 年前

    你检查过房间了吗 "profile" module ?

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

    你也可以在谷歌上搜索“python hotshot”来获得类似的解决方案。

        3
  •  6
  •   jathanism    16 年前

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