Python 性能剖分工具
Python?性能剖分工具
? ? ? ?眼看著項目即將完成,卻被測試人員告知沒有通過性能測試,這種情況在開發(fā)中屢見不鮮。接下來的工作就是加班加點地找出性能瓶頸,然后進行優(yōu)化,再進行性能測試,如此這般周而復始直到通過性能測試。盡管豐富的工作經(jīng)驗有助于性能優(yōu)化,但只有科學地應用工具才能在最短的時間內(nèi)找出最佳優(yōu)化粒度的瓶頸代碼段,達到事半功倍的效果。
profile、cProfile與hotshot
?????????Python?內(nèi)置了豐富的性能優(yōu)化工具來幫助我們定位性能瓶頸,如:profile、cProfile和?hotshot。它們易于使用,而且有完備的支持文檔可供參考。下面以最常用的?profile?模塊為例來說明它們的使用方法,假定要剖分的腳本文件為?foo.py?,它的內(nèi)容如下:
def foo():sum = 0for i in range(100):sum += ireturn sum if __name__ == "__main__":foo()對?foo.py?進行性能剖分的方法之一是修改?foo.py?里的?if?程序塊,引入?profile?模塊:
if __name__ == "__main__":import profileprofile.run("foo()")然后執(zhí)行?foo.py?即可完成性能剖分,剖分結(jié)果將以文本報表的形式打印到標準輸出。
?????????因為上述方法需要修改?foo.py?文件,所以我們通常更傾向于使用無需修改源文件的方法——就是在命令行中用應用?python?的?–m?參數(shù)來執(zhí)行?profile?:
python –m profile foo.py?????????除了可以使用?profile?模塊外,還可以使用?cProfile?模塊。cProfile由?C?語言實現(xiàn),是剖分代價更低的剖分器,有和?profile?模塊相同的接口,但只能用于2.5或以上版本。Python?另一個內(nèi)置的剖分器是?hotshot,但是?hotshot?模塊已經(jīng)不再推薦使用,因為將來它可能會被移出標準庫。
pstats
?
????????無論使用哪個剖分器,它的剖分數(shù)據(jù)都可以保存到二進制文件,如foo.prof。分析和查看剖分結(jié)果文件需要使用?pstats?模塊,它極具伸縮性,可以輸出形式多樣的文本報表,是文本界面下不可或缺的工具。
?????????使用?pstats?分析剖分結(jié)果很簡單,幾行代碼就可以了:
import pstats p = pstats.Stats("foo.prof") p.sort_stats("time").print_stats()運行上述腳本將輸出結(jié)果為按函數(shù)內(nèi)部運行時間(不計調(diào)用子函數(shù)的時間)長短排序的報表。
?????????sort_stats()?方法是?pstats.Stats?最重要的方法之一,它用以對剖分數(shù)據(jù)進行排序。sort_stats()?接受一個字符串參數(shù),這個字符串標識了排序的字段,常用的可選的參數(shù)及其意義如下:
‘ncalls’ | 被調(diào)用次數(shù) |
‘cumulative’ | 函數(shù)運行的總時間 |
‘nfl’ | Name/file/line |
‘time’ | 函數(shù)內(nèi)部運行時間(不計調(diào)用子函數(shù)的時間) |
除了?sort_stats()?外,?pstats.Stats?還有?print_callees()?和?print_callers()?方法用以輸出指定函數(shù)所調(diào)用的函數(shù)和調(diào)用過指定函數(shù)的函數(shù)。
?????????除了編編程接口外,pstats?還提供了友好的命令行交互環(huán)境,在命令行執(zhí)行?python –m pstats?就可以進入交互環(huán)境,在交互環(huán)境里可以使用 read/add?指令讀入/加載剖分結(jié)果文件,stats?指令用以查看報表,?callees?和?callers?指令用以查看特定函數(shù)的被調(diào)用者和調(diào)用者。下圖是?pstats?的截圖,標識了它的基本使用方法:
?
from :http://blog.csdn.net/gzlaiyonghao/article/details/2120147
轉(zhuǎn)載于:https://www.cnblogs.com/hehehaha/p/6332327.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Python 性能剖分工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二十四、oracle pl/sql 变量
- 下一篇: ASP.NET - 演练:创建网页以显示