Python 系統資源信息獲取工具,你用過沒?

      網友投稿 997 2022-05-28

      香香的口味,你吃過沒?

      辣辣的感覺,你嘗過沒?

      網爆紅人的歌聲,你聽過沒?

      Python?系統資源信息獲取的工具,你用過沒?

      真正的烤面筋

      可帶勁啦!~~~

      讓你吃到真正的實惠!

      不一樣的滋味!!!

      致敬那個不屈的男人(面筋哥 程書林)

      工具介紹

      psutil(process and system utilities)是一個跨平臺的庫,github、官方文檔

      我們可以用它來查看系統運行進程以及資源利用率。它主要用于系統監控、過程資源分析和限制以及運行過程的管理。psutil 的主要功能結構如下圖所示

      它有三大功能模塊,分別是 System related function、Processes 和 Windows Service。

      psutil 實現了UNIX命令行工具提供的許多功能,比如 top、free、netstat、kill 等,并且還兼容各大操作系統:

      psutil 可以說是系統管理老大哥或者運維小伙不可或缺的必備模塊。

      psutil 的安裝

      我們可以一邊翻閱 psutil 的官方文檔,一邊編寫代碼,這樣就能夠更快的學習。

      在 Python 環境下安裝,直接使用 pip 命令即可:

      pip?install?psutil

      但是,如果你只希望當前用戶可用,而不是整個系統所有用戶都能使用,你就需要調整你的命令:

      pip?install?-user?psutil

      除此之外,它還提供了如 wget、curl 等多種安裝方式,具體可參閱文檔的 install 部分,但是通常來說?pip install psutil?命令已經滿足我們的需求了。

      系統相關操作

      它為我們提供了一些系統常用的操作內容 可參閱文檔。其中包括了 CPU、內存、磁盤、網絡、傳感器和進程等方面。

      CPU 監控

      可以通過 cpu_times 模塊對 cpu 資源進行查看,比如:

      >>>?import?psutil

      >>>?psutil.cpu_times()

      scputimes(user=477.29,?nice=0.0,?system=262.86,?idle=6074.83)

      cpu_times 中的參數有哪些含義呢?文檔中也給出了具體的釋義

      翻譯一下,我們可以看到它給使用者提供了比較細致的信息監控:

      將系統CPU時間作為命名元組返回。每個屬性表示CPU在給定模式下花費的秒數。屬性可用性因平臺而異:

      user:正常進程在用戶模式下執行所花費的時間;?在Linux上,這還包括訪客時間

      system:在內核模式下執行的進程所花費的時間

      閑置:無所事事的時間

      特定于平臺的字段:

      nice?(UNIX):在用戶模式下執行的niced(優先級)進程所花費的時間;?在Linux上,這還包括guest_nice時間

      iowait?(Linux):等待I?/?O完成所花費的時間

      irq?(Linux,BSD):服務硬件中斷所花費的時間

      softirq?(Linux):服務軟件中斷所花費的時間

      steal?(Linux?2.6.11+):在虛擬化環境中運行的其他操作系統所花費的時間

      guest?(Linux?2.6.24+):在Linux內核的控制下為客戶操作系統運行虛擬CPU所花費的時間

      guest_nice?(Linux?3.2.0+):運行niced?guest虛擬機所花費的時間(Linux內核控制下的來賓操作系統的虛擬CPU)

      interrupt?(Windows):服務硬件中斷所花費的時間(類似于UNIX上的“irq”)

      dpc?(Windows):服務延遲過程調用(DPC)所花費的時間;DPC是以比標準中斷低的優先級運行的中斷。

      往下看還可以看到其他的 cpu 監控模塊,比如我們最需要的 cpu 資源消耗百分比,cpu_percent(interval=None, percpu=False) 可以返回一個浮點數,表示當前系統范圍的CPU利用率百分比。當interval為> 0.0比較間隔之前和之后經過的系統CPU時間(阻塞)。當interval是0.0或None比較自上次調用或模塊導入后經過的系統CPU時間,立即返回。這意味著第一次調用它將返回一個無意義的0.0 值,你應該忽略它。在這種情況下,建議0.1在調用之間至少調用此函數的準確性。當percpu是True返回表示利用率的浮點數列表,以每個CPU的百分比表示。列表的第一個元素是指第一個CPU,第二個元素是第二個CPU,依此類推。列表的順序在調用之間是一致的。

      而通過 cpu_count() 可以查看 cpu 核心數量,它可以返回系統中 cpu 的數量(與 os.cpu_count 的返回相同)

      我電腦的 cpu 是 i3 ,但是得到的 cpu 是 4(應該得到的是2) ,為什么呢?

      cpu_count() 返回的是 cpu 邏輯數量,物理數量得加上參數cpu_count(logical = True ) 運行得到的 cpu 數量為 2,也就是我們常說的雙核四線程。

      小 demo

      如果我們希望得到類似于 top 命令的使用率排行,那我們應該如何做呢?鑒于前面學習的 cpu_percent 我們來嘗試一下:

      psutil.cpu_percent(interval=3,?percpu=True)

      其中的 interval 代表比較間隔之前和之后經過的系統CPU時間,也就是比較 3 秒間隔中 cpu 的占用率

      如果要實現排行,那么就需要很多的記錄,意味著我們可以嘗試通過 for 循環來實現(此處將時間間隔設為 1 即可):

      當然,這僅僅只是將信息輸出了 10 次,如果要進行排行,那么還需要其他的處理。

      上圖是我電腦的資源信息截圖,結合截圖來看,我們通過代碼獲取的系統資源信息還是比較可信的

      關于 cpu 信息獲取的其他知識,請翻閱 psutil 官方文檔的 cpu 部分,接下來要學習內存的信息獲取了。

      內存信息獲取

      virtual_memory()將有關系統內存使用情況的統計信息作為命名元組返回,包括以字節表示的以下字段。主要指標:

      總計:總物理內存。

      可用:可以在沒有系統進入交換的情況下立即提供給進程的內存。這是通過根據平臺對不同的內存值求和來計算的,并且它應該用于以跨平臺方式監視實際內存使用情況。

      其他指標:

      used:使用的內存,根據平臺的不同計算,僅供參考。總計?-?免費不一定匹配使用。

      Python 系統資源信息獲取工具,你用過沒?

      free:內存不被使用(歸零),隨時可用;?請注意,這并不反映可用的實際內存(?請改用)。總計?-?使用不一定與免費匹配?。

      active?(UNIX):當前正在使用或最近使用的內存,因此它在RAM中。

      inactive?(UNIX):標記為未使用的內存。

      buffers?(Linux,BSD):緩存文件系統元數據之類的東西。

      cached?(Linux,BSD):緩存各種事物。

      shared?(Linux,BSD):可由多個進程同時訪問的內存。

      slab?(Linux):內核數據結構緩存。

      wired?(BSD,macOS):標記為始終保留在RAM中的內存。它永遠不會移動到磁盤。

      當然,我們并不會關注太細致的內存信息,只需要獲取內容總量、當前可用量或者當前已用量等信息即可。

      內存不足警報的小 demo

      現在有這么一個需求,當監控到內存不足 300M 的時候通過代碼發出警告信息,我們可以將需求簡化為:內存不足、發出提示

      當然,上面的代碼并不能夠真正的給我們發出警告,因為它只是向你表達它能夠做到的事。如果需要做到監控,還需要編寫更多的代碼、設計更好的處理邏輯。

      內存信息獲取的其他模塊介紹

      swap_memory() 將系統交換內存統計信息作為命名元組返回:

      total:總交換內存(以字節為單位)

      used:以字節為單位使用的swap內存

      free:以字節為單位的自由交換內存

      percent:計算的百分比使用率(total?-?available)?/?total?*?100

      sin:系統從磁盤交換的字節數(累計)

      sout:系統從磁盤換出的字節數(累計)

      不過正常狀態下,我們用得并不多,因為它并不是返回系統所有的內存資源信息,而是交換內存的統計信息。

      進程信息

      進程信息文檔定位,進程信息也是我們比較關注的方面,psutil.pids() 可以返回當前運行的PID列表,例如:

      >>>?psutil.pids()

      [1,?2,?3,?5,?7,?8,?9,?10,?11,?12,?13,?14,?15,?17,?18,?19,?...,?32498]

      文檔中有一個比較有意思的介紹

      我們可以按名稱過濾進程信息,為什么說他有意思呢?

      比如我們可以通過記錄 Python 的進程信息、內存資源信息、cpu 資源信息,來分析我們所寫的 Python 代碼在服務器上的資源占用情況。我們嘗試篩選出 Python 相關的 pid:

      >>>?[p.info?for?p?in?psutil.process_iter(attrs=['pid',?'name'])?if?'python'?in?p.info['name']]

      [{'name':?'python3.6',?'pid':?1447}]

      >>>

      pid 1447 的這個進程,正好是我在控制臺中演示代碼時,啟動的 Python 進程。

      總結

      好了,關于 psutil 的簡單介紹就到這里,感覺好像沒有學到什么高大上的知識?感覺輕輕略過了一遍,并沒有留下什么深刻映像?

      可能下一回,我們就會通過 psutil 實現一個服務器資源監控和比對的工具,比如這樣的:

      有可能很完善,但是也有可能不需要那么多功能。

      學習更多 Python、爬蟲以及深度學習相關的知識,可以關注微信公眾號【進擊的Coder】,和大佬一起 Coding 共同進步。

      請在評論區為 面筋哥-程書林打 call

      任務調度 Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:記錄HBase手動刪除Hadoop備份(archive)文件后,引發Hbase寫入數據出錯等一系列問題處理
      下一篇:Windows 10安裝Python-3.6.5
      相關文章
      亚洲熟妇无码久久精品| 亚洲成A∨人片天堂网无码| 亚洲永久精品ww47| 亚洲成av人在片观看| 亚洲AV成人精品一区二区三区| 亚洲综合色婷婷在线观看| 亚洲天堂免费在线| 亚洲1区1区3区4区产品乱码芒果| 亚洲精品乱码久久久久久下载| 亚洲一区精品中文字幕| 久久av无码专区亚洲av桃花岛| 精品亚洲aⅴ在线观看| 亚洲视频一区网站| 亚洲福利秒拍一区二区| 亚洲人成在线播放| 亚洲成A∨人片在线观看不卡| 国产亚洲av人片在线观看| 亚洲另类激情专区小说图片| 亚洲精品国产高清嫩草影院| 亚洲午夜成人精品电影在线观看| 亚洲欧洲一区二区三区| 狠狠综合久久综合88亚洲| 亚洲日韩精品无码一区二区三区| 国产亚洲精品美女久久久| 亚洲AV无码乱码在线观看富二代 | 亚洲成av人片不卡无码| 亚洲午夜电影在线观看高清| 亚洲高清中文字幕免费| 亚洲国产高清国产拍精品| 内射无码专区久久亚洲| 亚洲毛片av日韩av无码| 亚洲精品午夜无码专区| 亚洲一区二区三区日本久久九| 亚洲成av人片不卡无码| 亚洲精品无码aⅴ中文字幕蜜桃| 春暖花开亚洲性无区一区二区| 亚洲欧洲国产成人综合在线观看 | 亚洲videos| 亚洲JLZZJLZZ少妇| 亚洲人成无码网站久久99热国产| 亚洲精品中文字幕乱码三区|