首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >澄清来自pstats模块的输出。

澄清来自pstats模块的输出。
EN

Stack Overflow用户
提问于 2011-05-09 04:20:14
回答 1查看 631关注 0票数 3

我在代码上运行了cProfile,这是输出:

代码语言:javascript
复制
% 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)

从医生那里,

我们定义原语表示调用不是通过递归诱导的

然后,我可以安全地得出结论,我的代码之所以缓慢的原因是:

由于有122284个递归调用,所以最大的递归方法是_nocache.

  • Primitive和do_parse3调用都是微不足道的,不能进一步优化。
EN

回答 1

Stack Overflow用户

发布于 2011-05-09 08:05:55

  1. 我想你看不出是因为方法调用而花费的时间,还是由于在这些方法中所做的工作。
  2. 我同意。这将是开始微优化python代码的地方。它可能会给你带来一些加速,但通常有一个更好的方法来加速某些给定的任务。

  1. ,不是真的。首先,如果您有一个真正的应用程序,这将显示您可能想要摆脱的调用。我在你的个人资料中看到它被称为三次,也许它做了三次相同的计算,并且(子)结果可以被缓存。也许原始(原始)调用可以做一些事情来减少孩子们要做的工作量。

我可以建议用呼叫图代替吗?为此,我使用Gprof2Dot:

gprof2dot.py -f pstats tmp.pstats区点-Tpng -o tmp.png

http://code.google.com/p/jrfonseca/wiki/Gprof2Dot

http://maxy.homeip.net/misc/gprof2dot_example.png

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5932462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档