找到代码中最耗时部分的可靠方法是什么? [英] What is the reliable method to find most time consuming part of the code?
问题描述
沿着我的源代码,我尝试在 Python 中捕获和测量一个段的时间释放.如何以方便且精确的方式测量该段通过时间?
使用分析器.
Python 的
更新:profilestats
和 pyprof2calltree
已经合并,所以它们现在也支持 Python 3.x.
Along my source code I try to capture and measure the time release of a segment in Python. How can I measure that segment pass time in a convenient way with good precision?
Use a profiler.
Python's cProfile
is included in the standard libary.
For an even more convenient way, use the package profilestats
. Then you can use a decorator to just decorate the functions you want to profile:
from profilestats import profile
@profile
def my_function(args, etc):
pass
This will cause a summary like this to be printed on 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}
The much more useful info however is in the cachegrind.out.profilestats
file generated. You can open this file with a tools that can visualize cachegrind statistics, for example RunSnakeRun and get nice, easy (or easier) to read visualizations of your call stack like this:
Update: Both pull requests for profilestats
and pyprof2calltree
have been merged, so they now support Python 3.x as well.
这篇关于找到代码中最耗时部分的可靠方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!