每个功能的python时间测量

ds_*_*ser 4 python performance time python-3.x

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

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

提前致谢.

Vee*_*rac 12

在终端,运行

python -m profile -s time file.py
Run Code Online (Sandbox Code Playgroud)

要么

python -m cProfile -s time file.py
Run Code Online (Sandbox Code Playgroud)

第二个可以更快,而且永远不会更糟.

这将给出类似的东西:

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

左侧将包含您的功能.


Kas*_*mvd 6

首先,我建议使用分析器模块或timeit来实现此目的。timeit 提供了一种简单的方法来对一小段 Python 代码进行计时!

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

import cProfile
import re
cProfile.run('re.compile("foo|bar")')
Run Code Online (Sandbox Code Playgroud)

您还可以使用这样的装饰器来测量专用方法的执行时间:

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

你可以这样使用它:

  @measure_time
  def foo():
        #content of function 
Run Code Online (Sandbox Code Playgroud)

注意f.__name__返回函数的名称!(在本例中为“foo”)