27

沿着我的源代码,我尝试在 Python 中捕获和测量一个段的时间发布。如何以方便的方式高精度地测量该段通过时间?

4

1 回答 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 profilestats3.x。pyprof2calltree

于 2013-11-08T11:22:17.647 回答