如何使用Python腳本分析CPU使用情況的?

来源:https://www.cnblogs.com/qingdeng123/archive/2019/07/22/11228663.html
-Advertisement-
Play Games

用以分析Python中CPU使用情況。CPU分析是通過分析CPU執行代碼的方式來測量代碼的性能,以此找到代碼中的不妥之處,然後處理它們。 接下來我們將看看如何跟蹤Python腳本使用時CPU使用情況,重點關註以下幾個方面: 1、cProfile 2、line_profiler 3、pprofile ...


用以分析Python中CPU使用情況。CPU分析是通過分析CPU執行代碼的方式來測量代碼的性能,以此找到代碼中的不妥之處,然後處理它們。

接下來我們將看看如何跟蹤Python腳本使用時CPU使用情況,重點關註以下幾個方面:

1、cProfile

2、line_profiler

3、pprofile

4、vprof

測量CPU使用率

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

 

如何使用Python腳本分析CPU使用情況的?

 

 

 

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

如何使用Python腳本分析CPU使用情況的?

 

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

如何使用Python腳本分析CPU使用情況的?

 

cProfile

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

CPython2的用法很簡單:

如何使用Python腳本分析CPU使用情況的?

 

如果您使用PyPy2:

如何使用Python腳本分析CPU使用情況的?

 

其輸出如下:

 

如何使用Python腳本分析CPU使用情況的?

 

 

即使使用這個文本輸出,很容易看到我們的腳本多次調用了list.append方法。

如果我們使用gprof2dot,我們可以以圖形的方式看到cProfile輸出。要使用它,我們必須首先安裝graphviz,之後是一些依賴包,最後在Ubuntu上使用如下命令:

如何使用Python腳本分析CPU使用情況的?

 

再次運行腳本:

如何使用Python腳本分析CPU使用情況的?

 

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

 

如何使用Python腳本分析CPU使用情況的?

 

 

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

1、第一行:Python文件名,行號和方法名稱

2、第二行:代碼塊占用全部時間的百分比

3、第三行:括弧中,方法本身占全部時間的百分比

4、第四行:調用函數的次數

例如,在頂部的第三個紅色方塊中,方法primes占用了98.28%的時間,其中65.44%的內容在其中進行,調用了40次。其餘的時間花在Python中的list.append(22.33%)和range(11.51%)中。

作為一個簡單的腳本,我們只需要重寫我們的腳本,具體的如下所示:

 

如何使用Python腳本分析CPU使用情況的?

 

 

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

如何使用Python腳本分析CPU使用情況的?

 

還有PyPy2:

如何使用Python腳本分析CPU使用情況的?

 

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

 

如何使用Python腳本分析CPU使用情況的?

 

 

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

 

如何使用Python腳本分析CPU使用情況的?

 

 

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

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。然後調用它:

如何使用Python腳本分析CPU使用情況的?

 

你將得到如下輸出:

 

如何使用Python腳本分析CPU使用情況的?

 

 

我們看到,重覆調用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),然後調用它:

如何使用Python腳本分析CPU使用情況的?

 

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

 

如何使用Python腳本分析CPU使用情況的?

 

 

我們現在可以更詳細地看到一切。讓我們來看看輸出。您可以獲得腳本的整個輸出,並且在每行之前,您可以看到對其進行的調用次數,運行時間(秒),每次調用的時間和全局時間的百分比,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上,顯示代碼散熱圖(第一個調用如下)和代碼分析(下麵的第二個調用):

如何使用Python腳本分析CPU使用情況的?

 

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

如何使用Python腳本分析CPU使用情況的?

 

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

 

如何使用Python腳本分析CPU使用情況的?

 

 

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

如何使用Python腳本分析CPU使用情況的?

 

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 響應數據和結果視圖 返回值分類 1.返回值是String 返回值類型是字元串的,會根據返回的字元串去尋找相對應的jsp頁面 2.返回值是Void 預設請求路徑是什麼就會去尋找請求路徑的jsp 編寫請求轉發和重定向的程式和直接響應 返回值是ModelAndView對象 (存JavaBean對象和跳轉頁 ...
  • 前言 今天我們一起學習下java.util.concurrent併發包里的 "CopyOnWriteArrayList" 工具類。當有多個線程可能同時遍歷、修改某個公共數組時候,如果不希望因使用 synchronize 關鍵字鎖住整個數組而影響性能,可以考慮使用CopyOnWriteArrayLis ...
  • 新聞 "ML.NET 1.2發佈,包含Model Builder升級" "NuGet.org上現在顯示GitHub的使用情況" "微基準測試設計準則" "為線程添加mono.wasm支持" "Haskell——經驗總結" "MSBuild二進位與結構日誌瀏覽器" 視頻及幻燈片 "F MonoGame ...
  • 常用方法 首先,我們應該知道HashMap類實現了Map介面,所以實現了Map常用的一些方法。 (1) 插入鍵值對數據 public V put(K key, V value) (2)根據鍵值獲取鍵值對值數據 public V get(Object key) (3)獲取Map中鍵值對的個數 publ ...
  • 我是大劉啊~ 堅持每周更新最少一次,為年薪20萬邁進! 我為什麼要學Python? 答:我想要漲工資。。。家裡有礦我就不會來燒腦了。。。。。。 先寫點什麼呢? 新手,hhh,激動無比,無從下爪。。。。 python基本的數據類型吧 正題:python基本的數據類型 1、整數(int):就是整數,上過 ...
  • 簡介 簡介 web1.0時代 web2.0時代 互聯網時代 互聯網+ --》智慧城市。 2012年提出。 雲計算+大數據時代 背景 背景 隨著互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。 1、第一 ...
  • 分支結構 學習資料來源 https://github.com/jackfrued/Python-100-Days/blob/master/Day01-15/03.%E5%88%86%E6%94%AF%E7%BB%93%E6%9E%84.md 1.應用場景 順序結構 如,變數計算,華氏度轉攝氏度,計算 ...
  • 17.推導式: 推導式:將for迴圈多行變成一行 1. list推導式:[] 2. 生成器表達器:() 3. 字典/集合推導式:{} list: [變數(加工後的變數) for 迴圈] [變數(加工後的變數) for 迴圈 加工條件] 生成器推導式: (變數(加工後的變數 ) for 迴圈) (變數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...