如何读取 IPython %prun (profiler) 命令的输出?

Posted

技术标签:

【中文标题】如何读取 IPython %prun (profiler) 命令的输出?【英文标题】:How do I read the output of the IPython %prun (profiler) command? 【发布时间】:2011-10-27 12:54:06 【问题描述】:

我运行这个:

In [303]: %prun my_function()
         384707 function calls (378009 primitive calls) in 83.116 CPU seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    37706   41.693    0.001   41.693    0.001 max
    20039   36.000    0.002   36.000    0.002 min
    18835    1.848    0.000    2.208    0.000 helper.py:119(fftfreq)

--剪辑--

tottime、percall、cumtime 分别是什么? ncalls 相当明显(函数被调用的次数)。我的猜测是 tottime 是在函数中花费的总时间,不包括在它自己的函数调用中花费的时间; percall 是 ???; cumtime 是在函数调用中花费的总时间,包括在它自己的函数调用中花费的时间(当然,不包括重复计算)。 docs 不太有用;谷歌搜索也无济于事。

【问题讨论】:

【参考方案1】:

它只是 Python 自己的分析器的一个方便的包装器,其文档在这里:

http://docs.python.org/library/profile.html#module-pstats

引用:

ncalls 对于通话次数,

tottime 表示在给定函数中花费的总时间(不包括调用子函数的时间),

percall是tottime除以ncalls的商

cumtime 是在这个和所有子函数中花费的总时间(从调用到退出)。这个数字即使对于递归也是准确的 功能。

percall 是 cumtime 除以原始调用的商

【讨论】:

一个只调用其他方法的方法怎么可能有显着的tottime

以上是关于如何读取 IPython %prun (profiler) 命令的输出?的主要内容,如果未能解决你的问题,请参考以下文章

Ipython notebook 小技巧

使用 %prun 对执行时间短的函数进行分析

为啥垃圾回收这么慢?

ipython 读取错误的 python 版本

如何在IPython shell中迭代自动完成建议

mysql 查询优化 ~ 善用profie利器