沿着我的源代码,我尝试捕获并测量Python中段的时间释放。如何以一种方便的方式精确测量该段传递时间?
答案 0 :(得分:40)
使用个人资料。
Python的cProfile
包含在标准库中。
要获得更方便的方法,请使用包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,并且可以很好,轻松(或更轻松)地读取调用堆栈的可视化,如下所示:
更新:profilestats
和pyprof2calltree
的拉取请求已合并,因此它们现在也支持Python 3.x.