2012-02-23 61 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