新聞中心
在這篇文章中,我將討論一個工具,用以分析Python中CPU使用情況。CPU分析是通過分析CPU執(zhí)行代碼的方式來測量代碼的性能,以此找到代碼中的不妥之處,然后處理它們。

專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站設(shè)計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)萬安免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
接下來我們將看看如何跟蹤Python腳本使用時CPU使用情況,重點關(guān)注以下幾個方面:
1、cProfile
2、line_profiler
3、pprofile
4、vprof
測量CPU使用率
對于這篇文章,我將主要使用與內(nèi)存分析中使用腳本相同的腳本,具體如下:
另外,請記住,在PyPy2中,您需要使用與之配合的pip版本:
并且其他依賴項也將被安裝:
cProfile
在討論CPU分析時,最常用的工具之一是cProfile,主要是因為它內(nèi)置在CPython2和PyPy2中。這是一個確定性的分析器,意味著在運行程序時會收集一組統(tǒng)計數(shù)據(jù),例如我們代碼的各個部分的執(zhí)行次數(shù)或執(zhí)行時間。此外,cProfile在系統(tǒng)上的開銷比其他內(nèi)置的分析器(配置文件)要低。
CPython2的用法很簡單:
如果您使用PyPy2:
其輸出如下:
即使使用這個文本輸出,很容易看到我們的腳本多次調(diào)用了list.append方法。
如果我們使用gprof2dot,我們可以以圖形的方式看到cProfile輸出。要使用它,我們必須首先安裝graphviz,之后是一些依賴包,***在Ubuntu上使用如下命令:
再次運行腳本:
我們得到以下output.png文件:
這樣更容易看到一切。我們來仔細看看它的輸出。您可以看到腳本中的函數(shù)調(diào)用如下:
1、***行:Python文件名,行號和方法名稱
2、第二行:代碼塊占用全部時間的百分比
3、第三行:括號中,方法本身占全部時間的百分比
4、第四行:調(diào)用函數(shù)的次數(shù)
例如,在頂部的第三個紅色方塊中,方法primes占用了98.28%的時間,其中65.44%的內(nèi)容在其中進行,調(diào)用了40次。其余的時間花在Python中的list.append(22.33%)和range(11.51%)中。
作為一個簡單的腳本,我們只需要重寫我們的腳本,具體的如下所示:
如果我們使用CPython2測量我們腳本的時間,
還有PyPy2:
我們通過使用PyPy2的CPython2和3.1X獲得了不錯的效果,下面是cProfile的調(diào)用流程圖:
您還可以以編程方式使用cProfile,例如:
這在某些情況下很有用,例如多進程性能測量
line_profiler
此分析器在行級提供關(guān)于工作負載的信息。它使用Cython在C中實現(xiàn),并將其與cProfile進行比較時發(fā)現(xiàn)其具有較小的開銷。
源代碼可以在這里找到,也可以在這里找到PyPI頁面。與cProfile相比,它具有一樣的開銷,不過卻要花費12倍的時間來獲取配置文件。
要使用它,您需要先通過pip添加它:pip install pip install Cython ipython == 5.4.1 line_profiler(CPython2)。這個分析器的一個主要缺點是它不支持PyPy。
就像使用memory_profiler一樣,您需要在要分析的函數(shù)中添加一個裝飾器。在我們的例子中,您需要在03.primes-v1.py中定義我們的primes函數(shù)之前添加@profile。然后調(diào)用它:
你將得到如下輸出:
我們看到,重復調(diào)用list.append的兩個循環(huán)花了最多的時間。
pprofile
根據(jù)作者說明,pprofile是一個“線程測量和統(tǒng)計的純python分析器”。
它受到line_profiler的啟發(fā),修復了很多缺點,但是由于它完全用Python編寫,所以它也可以與PyPy成功使用。與cProfile相比,使用CPython時的分析時間要多28倍,而使用PyPy時,分析時間要多10倍,而且細節(jié)水平更加細化。
我們也支持PyPy!除此之外,它支持剖析線程,這在各種情況下可能會很方便。
要使用它,您需要先通過pip添加它:pip install pprofile(CPython2)/ pypy -m pip install pprofile(PyPy),然后調(diào)用它:
輸出與我們以前看到的不同,我們得到如下結(jié)果:
我們現(xiàn)在可以更詳細地看到一切。讓我們來看看輸出。您可以獲得腳本的整個輸出,并且在每行之前,您可以看到對其進行的調(diào)用次數(shù),運行時間(秒),每次調(diào)用的時間和全局時間的百分比,pprofile為我們的輸出添加了額外的行(如第44和50行,以(call)開頭)與累積指標。
再次,我們看到,重復調(diào)用list.append的兩個循環(huán)花了我們腳本中最多的時間。
vprof
vprof是一個Python分析器,為各種Python程序特性(如運行時間和內(nèi)存使用)提供豐富的交互式可視化。它是一個基于Node.JS的圖形化的顯示在網(wǎng)頁中的結(jié)果。
使用它,您可以看到與Python腳本相關(guān)的以下一個或全部:
1、CPU使用圖
2、代碼分析
3、內(nèi)存圖
4、代碼熱圖
要使用它,您需要先通過pip添加它:pip install vprof(CPython2)/ pypy -m pip install vprof(PyPy),然后調(diào)用它:
在CPython2上,顯示代碼散熱圖(***個調(diào)用如下)和代碼分析(下面的第二個調(diào)用):
在PyPy上,顯示代碼散熱圖(***個調(diào)用如下)和代碼分析(下面的第二個調(diào)用):
在每種情況下,您將看到代碼散點圖的以下內(nèi)容
以及代碼分析的以下內(nèi)容。
結(jié)果以圖形方式看到,我們可以懸停鼠標或單擊每行以獲取更多信息。再次,我們看到,重復調(diào)用list.append的兩個循環(huán)花了我們腳本中最多的時間。
名稱欄目:Python腳本分析CPU使用情況
URL標題:http://www.5511xx.com/article/dpipiss.html


咨詢
建站咨詢
