找到最耗时的部分代码的可靠方法是什么?

时间:2013-11-08 11:16:12

标签: python profiling performance

沿着我的源代码,我尝试捕获并测量Python中段的时间释放。如何以一种方便的方式精确测量该段传递时间?

1 个答案:

答案 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,并且可以很好,轻松(或更轻松)地读取调用堆栈的可视化,如下所示:

RunSnakeRun

更新profilestatspyprof2calltree的拉取请求已合并,因此它们现在也支持Python 3.x.