當前位置:
首頁 > 知識 > Python腳本分析CPU使用情況

Python腳本分析CPU使用情況


Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。


在這篇文章中,我將討論一個工具,用以分析Python中CPU使用情況。CPU分析是通過分析CPU執行代碼的方式來測量代碼的性能,以此找到代碼中的不妥之處,然後處理它們。
接下來我們將看看如何跟蹤Python腳本使用時CPU使用情況,重點關注以下幾個方面:

    1、cProfile
    2、line_profiler
    3、pprofile
    4、vprof



測量CPU使用率


對於這篇文章,我將主要使用與內存分析中使用腳本相同的腳本,具體如下:


另外,請記住,在PyPy2中,您需要使用與之配合的pip版本:



並且其他依賴項也將被安裝:



cProfile


在討論CPU分析時,最常用的工具之一是cProfile,主要是因為它內置在CPython2和PyPy2中。這是一個確定性的分析器,意味著在運行程序時會收集一組統計數據,例如我們代碼的各個部分的執行次數或執行時間。此外,cProfile在系統上的開銷比其他內置的分析器(配置文件)要低。
CPython2的用法很簡單:



如果您使用PyPy2:



其輸出如下:



即使使用這個文本輸出,很容易看到我們的腳本多次調用了list.append方法。
如果我們使用gprof2dot,我們可以以圖形的方式看到cProfile輸出。要使用它,我們必須首先安裝graphviz,之後是一些依賴包,最後在Ubuntu上使用如下命令:


再次運行腳本:



我們得到以下output.png文件:



這樣更容易看到一切。我們來仔細看看它的輸出。您可以看到腳本中的函數調用如下:

    1、第一行:Python文件名,行號和方法名稱
    2、第二行:代碼塊佔用全部時間的百分比
    3、第三行:括弧中,方法本身佔全部時間的百分比
    4、第四行:調用函數的次數


例如,在頂部的第三個紅色方塊中,方法primes佔用了98.28%的時間,其中65.44%的內容在其中進行,調用了40次。其餘的時間花在Python中的list.append(22.33%)和range(11.51%)中。
作為一個簡單的腳本,我們只需要重寫我們的腳本,具體的如下所示:


如果我們使用CPython2測量我們腳本的時間,



還有PyPy2:



我們通過使用PyPy2的CPython2和3.1X獲得了不錯的效果,下面是cProfile的調用流程圖:


您還可以以編程方式使用cProfile,例如:



這在某些情況下很有用,例如多進程性能測量



line_profiler


此分析器在行級提供關於工作負載的信息。它使用Cython在C中實現,並將其與cProfile進行比較時發現其具有較小的開銷。
源代碼可以在這裡找到,也可以在這裡找到PyPI頁面。與cProfile相比,它具有一樣的開銷,不過卻要花費12倍的時間來獲取配置文件。
要使用它,您需要先通過pip添加它:pip install pip install Cython ipython == 5.4.1 line_profiler(CPython2)。這個分析器的一個主要缺點是它不支持PyPy。
就像使用memory_profiler一樣,您需要在要分析的函數中添加一個裝飾器。在我們的例子中,您需要在03.primes-v1.py中定義我們的primes函數之前添加@profile。然後調用它:



你將得到如下輸出:



我們看到,重複調用list.append的兩個循環花了最多的時間。


pprofile


根據作者說明,pprofile是一個「線程測量和統計的純python分析器」。
它受到line_profiler的啟發,修復了很多缺點,但是由於它完全用Python編寫,所以它也可以與PyPy成功使用。與cProfile相比,使用CPython時的分析時間要多28倍,而使用PyPy時,分析時間要多10倍,而且細節水平更加細化。
我們也支持PyPy!除此之外,它支持剖析線程,這在各種情況下可能會很方便。
要使用它,您需要先通過pip添加它:

pip install pprofile(CPython2)/ pypy -m pip install pprofile(PyPy)

,然後調用它:



輸出與我們以前看到的不同,我們得到如下結果:


我們現在可以更詳細地看到一切。讓我們來看看輸出。您可以獲得腳本的整個輸出,並且在每行之前,您可以看到對其進行的調用次數,運行時間(秒),每次調用的時間和全局時間的百分比,pprofile為我們的輸出添加了額外的行(如第44和50行,以(call)開頭)與累積指標。
再次,我們看到,重複調用list.append的兩個循環花了我們腳本中最多的時間。



vprof


vprof是一個Python分析器,為各種Python程序特性(如運行時間和內存使用)提供豐富的互動式可視化。它是一個基於Node.JS的圖形化的顯示在網頁中的結果。
使用它,您可以看到與Python腳本相關的以下一個或全部:

    1、CPU使用圖
    2、代碼分析
    3、內存圖
    4、代碼熱圖


要使用它,您需要先通過pip添加它:

pip install vprof(CPython2)/ pypy -m pip install vprof(PyPy)

,然後調用它:
在CPython2上,顯示代碼散熱圖(第一個調用如下)和代碼分析(下面的第二個調用):



在PyPy上,顯示代碼散熱圖(第一個調用如下)和代碼分析(下面的第二個調用):



在每種情況下,您將看到代碼散點圖的以下內容



以及代碼分析的以下內容。



結果以圖形方式看到,我們可以懸停滑鼠或單擊每行以獲取更多信息。再次,我們看到,重複調用list.append的兩個循環花了我們腳本中最多的時間。



英文原文:https://pythonfiles.wordpress.com/2017/06/01/hunting-performance-in-python-code-part-3/


譯者:buhaoxuesheng



喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python程序員 的精彩文章:

為什麼Django框架仍舊統治著Python開發世界
其實你不知道什麼是網路性能
用python和Tesseract實現光學字元識別(OCR)
尾遞歸 —— 寫給命令式編程程序員

TAG:Python程序員 |

您可能感興趣

如何使用Python腳本分析CPU使用情況的?
Python腳本將ABAQUS結果導出到excel的方法
如何使用Python腳本分析惡意軟體
如何在 Linux 或者 UNIX 下調試 Bash Shell 腳本
使用 PySimpleGUI 輕鬆為程序和腳本增加 GUI
首款基於Pascal腳本語言的全功能Web伺服器Moon Http Server即將上線
如何在Windows下開發Python:在cmd下運行Python腳本
PC、移動端VPN搭建Shadowsocks一鍵安裝腳本
Windows Defender ATP機器學習和AMSI:發掘基於腳本的攻擊
用 Bash 腳本監控 Linux 上的內存使用情況
PentestPackage-Pentesting腳本集合
Python腳本建立ABAQUS節點集的方法
Windows創建計劃任務定時執行Python腳本
如何利用PowerShell診斷腳本執行命令並繞過AppLocker
利用ngx_python模塊嵌入到Python腳本
Python 腳本實現對 Linux 伺服器的監控
Redis 腳本
使用AutoHotkey和Excel中嵌入的惡意腳本來繞過檢測
橫掃各項NLP任務的BERT模型有了PyTorch實現!提供轉換腳本
從PowerShell內存轉儲中提取執行的腳本內容