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)
左侧将包含您的功能.
首先,我建议使用分析器模块或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”)
| 归档时间: |
|
| 查看次数: |
4836 次 |
| 最近记录: |