沿着我的源代码,我尝试在 Python 中捕获和测量一个段的时间发布。如何以方便的方式高精度地测量该段通过时间?
问问题
5842 次
1 回答
41
使用分析器。
PythoncProfile
包含在标准库中。
为了更方便的方式,使用 package profilestats
。然后你可以使用装饰器来装饰你想要分析的功能:
from profilestats import profile
@profile
def my_function(args, etc):
pass
这将导致在 STDOUT 上打印这样的摘要:
6 function calls in 0.026 seconds
Ordered by: cumulative time
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.026 0.026 some_code.py:3(some_func)
2 0.019 0.010 0.026 0.013 some_code.py:9(expensive_func)
2 0.007 0.003 0.007 0.003 {range}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
然而,更有用的信息在cachegrind.out.profilestats
生成的文件中。您可以使用可以可视化 cachegrind 统计信息的工具打开此文件,例如RunSnakeRun并获得漂亮、轻松(或更容易)读取调用堆栈的可视化效果,如下所示:
更新:两者的拉取请求都已合并,因此它们现在也支持 Python profilestats
3.x。pyprof2calltree
于 2013-11-08T11:22:17.647 回答