我在我的代码上运行了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)
来自文档,
我们定义原语意味着 呼叫不是通过递归引起的
我可以安全地断定我的代码速度慢的原因是:
do_parse3
&amp; _nocache
。答案 0 :(得分:2)
我认为您无法看到是因为方法调用而花费的时间,还是由于在这些方法中完成的工作。
我同意。这将是开始微优化python代码的地方。它可能会为您带来一些加速,但通常有更好的方法可以加快某些特定的任务。
不是真的。首先,如果你有一个真正的应用程序,它会显示你可能想要摆脱的调用。我在你的个人资料中看到它被称为三次;也许它正在进行三次相同的计算,并且(子)结果可以被缓存。也许原始(原始)调用可以做一些事情来减少孩子们的工作量。
我可以建议您查看通话图吗?我使用Gprof2Dot:
gprof2dot.py -f pstats tmp.pstats | dot -Tpng -o tmp.png
http://code.google.com/p/jrfonseca/wiki/Gprof2Dot
http://maxy.homeip.net/misc/gprof2dot_example.png