您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān) 如何進(jìn)行Python Profiling性能分析 ,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
性能分析(Profiling)可用于分析程序的運(yùn)行時(shí)間主要消耗在何處,以便有效優(yōu)化程序的運(yùn)行效率。
Profiling可分為兩步,一是運(yùn)行程序收集程序不同部分運(yùn)行時(shí)間的數(shù)據(jù),二是數(shù)據(jù)的可視化和分析。
提示:
下面介紹的方法主要針對(duì)類Linux系統(tǒng),部分工具在Windows等系統(tǒng)
可能也能使用。
Python的cProfile模塊可用于數(shù)據(jù)采集,適用于Python 2和Python 3。其調(diào)用方法很簡單:
import cProfile# 以下調(diào)用將運(yùn)行函數(shù)somefunc(),并將相關(guān)數(shù)據(jù)記錄到log_file.pyprofcProfile.run('somefunc()', 'log_file.pyprof')
更多信息請(qǐng)參考Python Profiler文檔。
有些小程序也可以直接從命令行調(diào)用cProfile模塊執(zhí)行[1]:
python -m cProfile -o profile_data.pyprof script_to_profile.py
hotshot是高性能的Profiling數(shù)據(jù)采集工具,其運(yùn)行時(shí)對(duì)程序效率的影響很小,但會(huì)產(chǎn)生巨大的運(yùn)行記錄,分析也比較慢。[2] Python 3中沒有hotshot。故如無特殊需求,請(qǐng)使用cProfile。
import hotshotprofiler = hotshot.Profile("hotshot.log")profiler.run('trackStereo.solveStereoNew()')
Gprof2Dot的輸出,經(jīng)dot命令渲染后的圖片。
Gprof2Dot可將多種Profiler的數(shù)據(jù)轉(zhuǎn)成Graphviz可處理的圖像表述。配合dot命令,即可得到不同函數(shù)所消耗的時(shí)間分析圖。以處理cProfile的記錄為例[3]:
# 運(yùn)行程序記錄數(shù)據(jù):# python -m cProfile -o profile_data.pyprof path/to/your/script arg1 arg2 # profile_data.pyprof是獲取的數(shù)據(jù);dot命令需要安裝Graphviz才能用gprof2dot.py -f pstats profile_data.pyprof | dot -Tpng -o output.png
Run Snake Run截圖
RunSnakeRun是個(gè)Python腳本,使用wxPython將Profiler數(shù)據(jù)可視化,效果如圖。
RunSnakeRun還可分析內(nèi)存占用,但仍處于實(shí)驗(yàn)階段。[4]
KCacheGrind可視化Python運(yùn)行時(shí)數(shù)據(jù)
KCacheGrind是Linux中常用的profiling visualization軟件,其默認(rèn)可處理valgrind的輸出。通過一些腳本也可以讓其分析cProfile或hotshot記錄下的數(shù)據(jù)。
處理cProfile的數(shù)據(jù)可使用pyprof2calltree:
# 運(yùn)行程序記錄數(shù)據(jù):# python -m cProfile -o profile_data.pyprof path/to/your/script arg1 arg2 # 使用pyprof2calltree處理數(shù)據(jù)并自動(dòng)調(diào)用KCacheGrindpyprof2calltree -i profile_data.pyprof -k
處理hotshot的數(shù)據(jù)可使用KCacheGrind中的hotshot2calltree命令:
# 使用hotshot2calltree處理數(shù)據(jù),完成后需手動(dòng)在KCacheGrind中打開輸出文件hotshot2calltree hotshot.log -o hs_calltree.log
注意:
KCacheGrind雖然功能強(qiáng)大,但其輸出的分析樹似乎并不完整,如果您了解原因,請(qǐng)補(bǔ)充。
上述就是小編為大家分享的 如何進(jìn)行Python Profiling性能分析 了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。