2012-02-23 64 views
2

可能重复:
How to profile my code?什么是分析和性能测试python代码的最佳实践和工具?

什么都用于分析和性能测试Python代码的最佳实践和工具? 任何快速胜出或建议。

CProfile接缝流行和一些伟大的笔记/答案下面,都是非常好的答案/教程。投票,我会在一两天内挑选最好的。谢谢@senderle和@ campos.ddc

一旦发现问题区域,是否有任何成语和/或提示转换代码使其更快?

+0

伟大的联系,谢谢里克。我会检查一下。除分析以外的其他任何成语? – 2012-02-23 01:19:37

+0

* [这是一个快速胜利。](http://stackoverflow.com/questions/4295799/how-to-improve-performance-of-this-code/4299378#4299378)* – 2012-02-23 13:28:31

回答

2

cProfile是经典的剖析工具。使用它的基本方法是like so

python -m cProfile myscript.py 

在这里,我把它叫做一个参考实现,我写了mersenne twister的测试程序。

[email protected] $ python -m cProfile mersenne.twister.py 
True 
True 
1000000 
     1003236 function calls in 2.163 CPU seconds 

    Ordered by: standard name 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     1 0.000 0.000 2.163 2.163 <string>:1(<module>) 
     1 0.001 0.001 2.162 2.162 mersenne.twister.py:1(<module>) 
     3 0.001 0.000 0.001 0.000 mersenne.twister.py:10(init_gen) 
    1000014 1.039 0.000 1.821 0.000 mersenne.twister.py:19(extract_number) 
     1 0.000 0.000 0.000 0.000 mersenne.twister.py:3(Twister) 
    1603 0.766 0.000 0.782 0.000 mersenne.twister.py:33(generate_numbers) 
     1 0.000 0.000 0.000 0.000 mersenne.twister.py:4(__init__) 
     1 0.317 0.317 2.161 2.161 mersenne.twister.py:42(_test) 
     1 0.001 0.001 2.163 2.163 {execfile} 
     1 0.000 0.000 0.000 0.000 {len} 
     1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 
    1608 0.038 0.000 0.038 0.000 {range} 

ncalls是函数被调用的次数。 tottime是在一个函数中花费的总时间,不包括在子函数调用中花费的时间。 percalltottime/ncallscumtime是花在函数上的时间,包括在子函数调用中花费的时间。其余数据如下:filename:lineno(func_name)

在大多数情况下,首先看ncallstottime。在上面的数据中,你可以看到这个程序花费的大部分时间发生在extract_number。此外,我们可以看到extract_number被称为很多(1000014)次。所以我可以做的任何事情来加速extract_number将显着加快此测试代码的执行。如果它获得微秒,那么增益将乘以1000014,从而产生完整的第二增益。

然后我应该在generate_numbers上工作。在这方面的收益不会那么重要,但它们可能仍然很重要,并且由于该功能再耗时0.7秒,所以还有一些好处。

这应该给你的一般想法。但是,请注意,例如,在递归情况下,tottime数字有时可能具有欺骗性。

+0

感谢senderle,任何提示如何解释结果并采取行动? – 2012-02-23 01:03:28

+0

@MattAlcock你可能想看看关于分析的python官方文档:http://docs.python.org/library/profile.html – 2012-02-23 01:15:18