每个功能的python时间测量

时间:2014-09-21 11:09:46

标签: python performance python-3.x time

我刚刚在python中编写了我的第一个程序,我已将所有函数都写在一个模块中,我只是通过输入文件作为参数从命令行执行它并且它有效。但是当我给出一个大数据集时,我的程序会持续运行一段时间。现在我的下一步是找到哪个功能在我的模块中花费更多时间。我可以得到整个程序所花费的时间,但我需要单独使用每个函数。

我试图理解python中的timeit和profile模块,但根据我的理解,他们给出了特定函数所花费的时间。有没有办法知道我的模块中每个函数作为统计数据所花费的时间(一次全部)?

提前致谢。

2 个答案:

答案 0 :(得分:10)

在终端上,运行

python -m profile -s time file.py

python -m cProfile -s time file.py

第二种可能更快,而且永远不会更糟。

这将提供类似的内容:

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       39    0.132    0.003    0.139    0.004 :0(load_dynamic)
      239    0.097    0.000    0.097    0.000 :0(loads)
    541/1    0.083    0.000    3.556    3.556 :0(exec)
       30    0.082    0.003    0.082    0.003 :0(statusBar)
                        ... etc ...

左侧将包含您的功能。

答案 1 :(得分:1)

首先我建议使用profilers模块或timeit来实现此目标 .timeit提供了一种简单的方法来计算一小段Python代码!

要分析采用单个参数的函数,您可以执行以下操作:

import cProfile
import re
cProfile.run('re.compile("foo|bar")')

此外,您可以使用这样的Decorator来衡量专用方法的执行时间:

import time                                                

def measure_time(f):

  def timed(*args, **kw):
    ts = time.time()
    result = f(*args, **kw)
    te = time.time()

    print '%r (%r, %r) %2.2f sec' % \
          (f.__name__, args, kw, te-ts)
    return result

return timed

你可以像这样使用它:

  @measure_time
  def foo():
        #content of function 

请注意f.__name__返回函数名称! (在这种情况下'foo')