0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python腳本使用時(shí)CPU使用情況檢測(cè)過(guò)程詳解

馬哥Linux運(yùn)維 ? 2017-11-30 15:42 ? 次閱讀

在這篇文章中,我將討論一個(gè)工具,用以分析PythonCPU使用情況。CPU分析是通過(guò)分析CPU執(zhí)行代碼的方式來(lái)測(cè)量代碼的性能,以此找到代碼中的不妥之處,然后處理它們。接下來(lái)我們將看看如何跟蹤Python腳本使用時(shí)CPU使用情況,重點(diǎn)關(guān)注以下幾個(gè)方面:1、cProfile2、line_profiler3、pprofile4、vprof

測(cè)量CPU使用率對(duì)于這篇文章,我將主要使用與內(nèi)存分析中使用腳本相同的腳本,具體如下:

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

并且其他依賴項(xiàng)也將被安裝:

cProfile在討論CPU分析時(shí),最常用的工具之一是cProfile,主要是因?yàn)樗鼉?nèi)置在CPython2和PyPy2中。這是一個(gè)確定性的分析器,意味著在運(yùn)行程序時(shí)會(huì)收集一組統(tǒng)計(jì)數(shù)據(jù),例如我們代碼的各個(gè)部分的執(zhí)行次數(shù)或執(zhí)行時(shí)間。此外,cProfile在系統(tǒng)上的開(kāi)銷比其他內(nèi)置的分析器(配置文件)要低。CPython2的用法很簡(jiǎn)單:

如果您使用PyPy2:

其輸出如下:

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

再次運(yùn)行腳本:

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

這樣更容易看到一切。我們來(lái)仔細(xì)看看它的輸出。您可以看到腳本中的函數(shù)調(diào)用如下:1、第一行:Python文件名,行號(hào)和方法名稱2、第二行:代碼塊占用全部時(shí)間的百分比3、第三行:括號(hào)中,方法本身占全部時(shí)間的百分比4、第四行:調(diào)用函數(shù)的次數(shù)例如,在頂部的第三個(gè)紅色方塊中,方法primes占用了98.28%的時(shí)間,其中65.44%的內(nèi)容在其中進(jìn)行,調(diào)用了40次。其余的時(shí)間花在Python中的list.append(22.33%)和range(11.51%)中。作為一個(gè)簡(jiǎn)單的腳本,我們只需要重寫我們的腳本,具體的如下所示:

如果我們使用CPython2測(cè)量我們腳本的時(shí)間,

還有PyPy2:

我們通過(guò)使用PyPy2的CPython2和3.1X獲得了不錯(cuò)的效果,下面是cProfile的調(diào)用流程圖:

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

這在某些情況下很有用,例如多進(jìn)程性能測(cè)量

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

你將得到如下輸出:

我們看到,重復(fù)調(diào)用list.append的兩個(gè)循環(huán)花了最多的時(shí)間。

pprofile根據(jù)作者說(shuō)明,pprofile是一個(gè)“線程測(cè)量和統(tǒng)計(jì)的純python分析器”。它受到line_profiler的啟發(fā),修復(fù)了很多缺點(diǎn),但是由于它完全用Python編寫,所以它也可以與PyPy成功使用。與cProfile相比,使用CPython時(shí)的分析時(shí)間要多28倍,而使用PyPy時(shí),分析時(shí)間要多10倍,而且細(xì)節(jié)水平更加細(xì)化。我們也支持PyPy!除此之外,它支持剖析線程,這在各種情況下可能會(huì)很方便。要使用它,您需要先通過(guò)pip添加它:pip install pprofile(CPython2)/ pypy -m pip install pprofile(PyPy),然后調(diào)用它:

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

我們現(xiàn)在可以更詳細(xì)地看到一切。讓我們來(lái)看看輸出。您可以獲得腳本的整個(gè)輸出,并且在每行之前,您可以看到對(duì)其進(jìn)行的調(diào)用次數(shù),運(yùn)行時(shí)間(秒),每次調(diào)用的時(shí)間和全局時(shí)間的百分比,pprofile為我們的輸出添加了額外的行(如第44和50行,以(call)開(kāi)頭)與累積指標(biāo)。再次,我們看到,重復(fù)調(diào)用list.append的兩個(gè)循環(huán)花了我們腳本中最多的時(shí)間。

vprofvprof是一個(gè)Python分析器,為各種Python程序特性(如運(yùn)行時(shí)間和內(nèi)存使用)提供豐富的交互式可視化。它是一個(gè)基于Node.JS的圖形化的顯示在網(wǎng)頁(yè)中的結(jié)果。使用它,您可以看到與Python腳本相關(guān)的以下一個(gè)或全部:1、CPU使用圖2、代碼分析3、內(nèi)存圖4、代碼熱圖要使用它,您需要先通過(guò)pip添加它:pip install vprof(CPython2)/ pypy -m pip install vprof(PyPy),然后調(diào)用它:在CPython2上,顯示代碼散熱圖(第一個(gè)調(diào)用如下)和代碼分析(下面的第二個(gè)調(diào)用):

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

在每種情況下,您將看到代碼散點(diǎn)圖的以下內(nèi)容

以及代碼分析的以下內(nèi)容。


結(jié)果以圖形方式看到,我們可以懸停鼠標(biāo)或單擊每行以獲取更多信息。再次,我們看到,重復(fù)調(diào)用list.append的兩個(gè)循環(huán)花了我們腳本中最多的時(shí)間。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10772

    瀏覽量

    210445
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4758

    瀏覽量

    84292

原文標(biāo)題:Python腳本分析CPU使用情況

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CUBEIDE運(yùn)行完可以看RAM的使用情況,運(yùn)行中可以實(shí)時(shí)查看RAM的使用情況嗎?

    CUBEIDE運(yùn)行完可以看RAM的使用情況,運(yùn)行中可以實(shí)時(shí)查看RAM的使用情況嗎?以及負(fù)載情況? 圖片是運(yùn)行完可以看RAM使用情況,是否可以運(yùn)行中實(shí)時(shí)查看?是不是cubemonito
    發(fā)表于 03-12 07:56

    樹(shù)莓派能不能加個(gè)可以根據(jù)CPU使用情況變風(fēng)速的風(fēng)扇?

    樹(shù)莓派能不能加個(gè)可以根據(jù)CPU使用情況變風(fēng)速的風(fēng)扇?怎么加?
    發(fā)表于 12-17 21:14

    如何查看RAM使用情況?

    嗨, 我正在使用STM32L053 Nucleo,我已經(jīng)為它運(yùn)行了一些代碼,我希望做一個(gè)RAM估計(jì)來(lái)查看當(dāng)前固件的RAM使用情況。如何查看RAM使用情況? 問(wèn)候#記憶
    發(fā)表于 08-05 10:08

    Android應(yīng)用的內(nèi)存使用情況檢查方法

    如何檢查 Android 應(yīng)用的內(nèi)存使用情況
    發(fā)表于 03-30 13:36

    ucosiii堆棧使用情況檢測(cè)使用率100%?

    用OSTaskStkChk函數(shù)檢測(cè)堆棧的使用情況,發(fā)現(xiàn)有兩個(gè)任務(wù)使用情況為100%,堆棧設(shè)置為1024,增大堆棧到2048,依然使用率100%,該任務(wù)代碼很短,一直運(yùn)行,雖然使用率100%,但是程序正常運(yùn)行并未崩潰,請(qǐng)問(wèn)這是由于
    發(fā)表于 04-20 22:56

    電池使用情況統(tǒng)計(jì)信息

    電池使用情況信息根據(jù)電池使用情況統(tǒng)計(jì)信息和電源配置文件中的值計(jì)算得出。電池使用情況統(tǒng)計(jì)信息框架可通過(guò)跟蹤設(shè)備組件在不同狀態(tài)下維持的時(shí)間來(lái)自動(dòng)確定電池使用情況統(tǒng)計(jì)信息。當(dāng)組件(WLAN
    發(fā)表于 12-31 07:01

    如何知道CPU利用率和內(nèi)存使用情況?

    我在 MIMXRT1062 板上工作,我使用了“EVK-MIMXRT1060-guix_washing_machine”示例。我想要 CPU 利用率和內(nèi)存使用情況。請(qǐng)給我有關(guān)它的信息,我也想知道它是如何計(jì)算的。
    發(fā)表于 03-31 06:21

    如何檢查imx6中的GPU使用情況?

    。 目前我正在使用 gmem_info 腳本來(lái)測(cè)試 GPU 使用情況并低于 o/p。 gmem_info Pid Total Reserved Contiguous Virtual Nonpaged
    發(fā)表于 05-22 07:04

    SoC如何查看內(nèi)存使用情況

    查看系統(tǒng)內(nèi)存: free -h 查看ION內(nèi)存 NPU內(nèi)存使用情況: cat /sys/kernel/debug/ion/bm_npu_heap_dump/summary | head -2VPU
    發(fā)表于 09-19 07:23

    主流GPS芯片使用情況

    主流GPS芯片使用情況
    發(fā)表于 11-27 14:34 ?13次下載

    在Linux系統(tǒng)下使用top命令查看CPU使用情況

    在Linux系統(tǒng)下,使用top命令查看CPU使用情況。
    發(fā)表于 07-10 11:46 ?4290次閱讀
    在Linux系統(tǒng)下使用top命令查看<b class='flag-5'>CPU</b><b class='flag-5'>使用情況</b>

    單片機(jī)整體的CPU使用情況詳細(xì)介紹

    打開(kāi)電腦的任務(wù)管理器,看著跳動(dòng)的 CPU 使用率,發(fā)現(xiàn)很舒服。每一個(gè)線程占用了多少 CPU 清清楚楚,也就能針對(duì)性的確認(rèn)為啥你的電腦跑的慢了。今天這篇筆記不講每個(gè)任務(wù)(或線程)CPU使用情
    發(fā)表于 11-25 15:58 ?12次下載
    單片機(jī)整體的<b class='flag-5'>CPU</b><b class='flag-5'>使用情況</b>詳細(xì)介紹

    STM32/KEIL/MDK 查看 FLASH 和 RAM 使用情況

    STM32/KEIL/MDK 查看 FLASH 和 RAM 使用情況
    發(fā)表于 12-02 09:06 ?13次下載
    STM32/KEIL/MDK 查看 FLASH 和 RAM <b class='flag-5'>使用情況</b>

    Windows查看電源使用情況

    這里使用Windows自帶的東西查看電源使用情況。1.按Win鍵+R,輸入cmd,回車。2.輸入Powercfg /batteryreport回車。3.根據(jù)提示找到電池報(bào)告文件,雙擊打開(kāi)即可。????...
    發(fā)表于 01-05 14:18 ?0次下載
    Windows查看電源<b class='flag-5'>使用情況</b>

    LPC86x ADC使用情況

    電子發(fā)燒友網(wǎng)站提供《LPC86x ADC使用情況.pdf》資料免費(fèi)下載
    發(fā)表于 08-16 10:42 ?0次下載
    LPC86x ADC<b class='flag-5'>使用情況</b>