我刚刚在python中编写了我的第一个程序,我已将所有函数都写在一个模块中,我只是通过输入文件作为参数从命令行执行它并且它有效。但是当我给出一个大数据集时,我的程序会持续运行一段时间。现在我的下一步是找到哪个功能在我的模块中花费更多时间。我可以得到整个程序所花费的时间,但我需要单独使用每个函数。
我试图理解python中的timeit和profile模块,但根据我的理解,他们给出了特定函数所花费的时间。有没有办法知道我的模块中每个函数作为统计数据所花费的时间(一次全部)?
提前致谢。
答案 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')