澄清pstats modu的输出

2024-07-03 07:15:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在代码上运行了cProfile,结果如下:

% stats 10
     646493 function calls (524209 primitive calls) in 3.606 CPU seconds

Ordered by: cumulative time
List reduced from 260 to 10 due to restriction <10>

ncalls   tottime  percall  cumtime  percall filename:lineno(function)
     1     0.000    0.000    3.606    3.606 <string>:1(<module>)
     1     0.007    0.007    3.606    3.606 {execfile}
     1     0.068    0.068    3.599    3.599 example.py:7(<module>)
     3     0.000    0.000    3.266    1.089 tree.py:1058(parseString)
6698/3     0.068    0.000    3.244    1.081 tree.py:2406(do_parse3)
104813/3   1.084    0.000    3.244    1.081 tree.py:926(_nocache)
2615/3     0.016    0.000    3.243    1.081 tree.py:2679(internal_parse)
3602/14    0.712    0.000    3.239    0.231 tree.py:2531(do_parse2)
  13/8     0.000    0.000    3.229    0.404 tree.py:2876(do_parse)
2546/20    0.024    0.000    3.218    0.161 tree.py:1003(parse)

从文件上看

We define primitive to mean that the call was not induced via recursion

那么,我是否可以得出结论,我的代码速度慢的原因是:

  1. 由于122284个递归调用。在
  2. 最大的递归方法是do_parse3&;_nocache。在
  3. 基元调用无关紧要,无法进一步优化。在

Tags: to代码pytreeparsestatsfunctiondo
1条回答
网友
1楼 · 发布于 2024-07-03 07:15:37
  1. 我想你看不出时间是因为方法调用,还是因为那些方法内部所做的工作。

  2. 我同意。这将是开始微优化python代码的地方。它可能会给你带来一些加速,但通常有更好的方法来加速某些给定的任务。

  3. 不是真的。首先,如果您有一个真正的应用程序,这将向您显示您可能希望消除的调用。我在你的配置文件中看到它被调用了三次;也许它在做同样的计算三次,(sub)结果可以被缓存。也许最初的(原始)调用可以做一些事情来减少孩子们要做的工作量。

我可以建议你看看调用图吗?我使用Gprof2Dot来执行此操作:

gprof2点.py-f pstats公司tmp.pstats公司|dot-Tpng-otmp.png公司在

http://code.google.com/p/jrfonseca/wiki/Gprof2Dot
http://maxy.homeip.net/misc/gprof2dot_example.png

相关问题 更多 >