亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python使用psutil實(shí)現(xiàn)系統(tǒng)監(jiān)控與資源管理

 更新時(shí)間:2025年05月16日 08:32:06   作者:蕭鼎  
這篇文章主要為大家詳細(xì)介紹了psutil?的各項(xiàng)功能,并結(jié)合實(shí)際代碼示例,展示如何用?Python?構(gòu)建自己的系統(tǒng)監(jiān)控工具,資源分析器和進(jìn)程管理腳本等

在系統(tǒng)運(yùn)維、資源監(jiān)控、性能分析、服務(wù)狀態(tài)診斷等領(lǐng)域,開發(fā)者常常需要獲取操作系統(tǒng)底層信息,如 CPU 使用率、內(nèi)存占用、磁盤讀寫、網(wǎng)絡(luò)傳輸、進(jìn)程詳情等。雖然這些功能可以通過 shell 命令實(shí)現(xiàn),如 top、df、ps、iostat 等,但在自動(dòng)化腳本和跨平臺(tái)開發(fā)中,使用 Python 腳本來完成這些任務(wù)更具靈活性和可移植性。

這正是 psutil 的用武之地 —— 一個(gè)功能強(qiáng)大的跨平臺(tái)系統(tǒng)監(jiān)控庫(kù),可以輕松獲取各種系統(tǒng)資源狀態(tài)和進(jìn)程信息,且支持 Linux、Windows、macOS 等平臺(tái)。

本文將深入講解 psutil 的各項(xiàng)功能,并結(jié)合實(shí)際代碼示例,展示如何用 Python 構(gòu)建自己的系統(tǒng)監(jiān)控工具、資源分析器、進(jìn)程管理腳本等。

一、psutil 簡(jiǎn)介

psutil 是“process and system utilities”的縮寫,它是一個(gè) 跨平臺(tái)的系統(tǒng)監(jiān)控庫(kù),用于:

  • 獲取 CPU、內(nèi)存、磁盤、網(wǎng)絡(luò) 等系統(tǒng)使用情況
  • 管理和獲取 進(jìn)程信息
  • 實(shí)現(xiàn)任務(wù)監(jiān)控、資源追蹤和系統(tǒng)健康檢查
  • 提供類 Unix ps, top, df, netstat, lsof 等命令的功能接口

它的設(shè)計(jì)初衷是替代用 Python 封裝 shell 命令的繁瑣做法,提供一致、優(yōu)雅、性能優(yōu)異的 API。

二、安裝與基本使用

安裝方式

使用 pip 安裝非常簡(jiǎn)單:

pip install psutil

安裝完成后,幾乎可以立即開始使用,無(wú)需額外配置。

快速示例:獲取當(dāng)前 CPU 使用率

import psutil

print("當(dāng)前 CPU 使用率:", psutil.cpu_percent(interval=1), "%")

cpu_percent() 表示在指定時(shí)間間隔內(nèi)(如 1 秒)測(cè)量 CPU 總體使用率。

三、CPU 信息監(jiān)控

1. 獲取 CPU 邏輯/物理核心數(shù)

print("物理核心數(shù):", psutil.cpu_count(logical=False))
print("邏輯核心數(shù):", psutil.cpu_count(logical=True))

2. 每個(gè)核心的使用率

import time

for _ in range(5):
    usage = psutil.cpu_percent(interval=1, percpu=True)
    print("每個(gè)核心使用率:", usage)

3. 獲取 CPU 時(shí)間信息

times = psutil.cpu_times()
print(f"user: {times.user}, system: {times.system}, idle: {times.idle}")

這個(gè) API 提供了系統(tǒng)級(jí)的 CPU 時(shí)間分布。

四、內(nèi)存信息監(jiān)控

1. 獲取虛擬內(nèi)存使用情況

mem = psutil.virtual_memory()
print(f"總內(nèi)存: {mem.total / 1024 ** 3:.2f} GB")
print(f"已使用: {mem.used / 1024 ** 3:.2f} GB")
print(f"空閑: {mem.available / 1024 ** 3:.2f} GB")
print(f"使用率: {mem.percent}%")

2. 獲取 swap 交換分區(qū)信息

swap = psutil.swap_memory()
print(f"Swap 總量: {swap.total / 1024 ** 3:.2f} GB")
print(f"使用率: {swap.percent}%")

五、磁盤信息監(jiān)控

1. 獲取磁盤分區(qū)信息

partitions = psutil.disk_partitions()
for p in partitions:
    print(f"掛載點(diǎn): {p.mountpoint}, 類型: {p.fstype}")

2. 獲取磁盤使用情況

usage = psutil.disk_usage('/')
print(f"總空間: {usage.total / 1024 ** 3:.2f} GB")
print(f"已用: {usage.used / 1024 ** 3:.2f} GB")
print(f"剩余: {usage.free / 1024 ** 3:.2f} GB")

3. 實(shí)時(shí)磁盤 IO 情況

io = psutil.disk_io_counters()
print(f"讀字節(jié): {io.read_bytes / 1024 ** 2:.2f} MB")
print(f"寫字節(jié): {io.write_bytes / 1024 ** 2:.2f} MB")

六、網(wǎng)絡(luò)信息監(jiān)控

1. 獲取網(wǎng)絡(luò) IO 情況

net = psutil.net_io_counters()
print(f"發(fā)送: {net.bytes_sent / 1024 ** 2:.2f} MB")
print(f"接收: {net.bytes_recv / 1024 ** 2:.2f} MB")

2. 獲取網(wǎng)卡信息

addrs = psutil.net_if_addrs()
for iface, infos in addrs.items():
    print(f"\n網(wǎng)卡: {iface}")
    for info in infos:
        print(f"  地址: {info.address} ({info.family})")

3. 當(dāng)前網(wǎng)絡(luò)連接

conns = psutil.net_connections(kind='inet')
for conn in conns[:5]:
    print(f"連接: {conn.laddr} -> {conn.raddr}, 狀態(tài): {conn.status}")

七、進(jìn)程管理

1. 枚舉當(dāng)前所有進(jìn)程

for proc in psutil.process_iter(['pid', 'name', 'username']):
    print(proc.info)

2. 獲取指定進(jìn)程的詳細(xì)信息

p = psutil.Process(1)  # PID 1 通常是 init 或 systemd
print(f"名稱: {p.name()}")
print(f"路徑: {p.exe()}")
print(f"狀態(tài): {p.status()}")
print(f"CPU使用率: {p.cpu_percent(interval=1.0)}")
print(f"內(nèi)存使用: {p.memory_info().rss / 1024 ** 2:.2f} MB")

3. 操作進(jìn)程(終止、掛起、恢復(fù))

p = psutil.Process(1234)
p.suspend()  # 掛起
p.resume()   # 恢復(fù)
p.terminate()  # 終止

注意:需要管理員權(quán)限或 root 權(quán)限才能操作其他用戶的進(jìn)程。

八、構(gòu)建一個(gè)簡(jiǎn)單的系統(tǒng)資源儀表板

你可以使用 psutil + rich 或 psutil + flask/streamlit 構(gòu)建漂亮的圖形或終端儀表盤。下面是一個(gè)簡(jiǎn)單的終端監(jiān)控:

import psutil
import time
import os

def monitor():
    while True:
        os.system('cls' if os.name == 'nt' else 'clear')
        print("=== 實(shí)時(shí)系統(tǒng)資源監(jiān)控 ===")
        print(f"CPU 使用率: {psutil.cpu_percent()}%")
        mem = psutil.virtual_memory()
        print(f"內(nèi)存: {mem.used / 1024 ** 3:.2f} GB / {mem.total / 1024 ** 3:.2f} GB ({mem.percent}%)")
        net = psutil.net_io_counters()
        print(f"網(wǎng)絡(luò): 發(fā)送 {net.bytes_sent / 1024 ** 2:.2f} MB, 接收 {net.bytes_recv / 1024 ** 2:.2f} MB")
        time.sleep(1)

if __name__ == "__main__":
    monitor()

可以擴(kuò)展為 Web 儀表盤,甚至接入 Grafana、Prometheus 進(jìn)行數(shù)據(jù)上報(bào)。

九、高級(jí)用法與實(shí)踐案例

1. 編寫一個(gè)自動(dòng)殺死高 CPU 占用進(jìn)程的守護(hù)腳本

def auto_kill(threshold=80):
    for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
        try:
            if proc.info['cpu_percent'] > threshold:
                print(f"殺死高 CPU 進(jìn)程: {proc.info}")
                psutil.Process(proc.info['pid']).terminate()
        except (psutil.NoSuchProcess, psutil.AccessDenied):
            continue

2. 跨平臺(tái)性能分析工具

你可以用 psutil 收集數(shù)據(jù)并記錄日志:

import json
import datetime

def log_stats():
    stats = {
        "time": str(datetime.datetime.now()),
        "cpu": psutil.cpu_percent(),
        "mem": psutil.virtual_memory().percent,
        "disk": psutil.disk_usage('/').percent,
    }
    with open("syslog.json", "a") as f:
        f.write(json.dumps(stats) + "\n")

可用于機(jī)器長(zhǎng)時(shí)間運(yùn)行狀態(tài)監(jiān)控和可視化分析。

十、總結(jié)與展望

psutil 是一個(gè)非常成熟、穩(wěn)定、文檔完善的 Python 庫(kù),它幾乎可以滿足你對(duì)操作系統(tǒng)資源訪問的一切需求,包括但不限于:

  • 任務(wù)管理器替代腳本
  • DevOps 運(yùn)維工具
  • 系統(tǒng)性能分析
  • 自動(dòng)化測(cè)試平臺(tái)
  • AI 訓(xùn)練任務(wù)資源調(diào)度

優(yōu)勢(shì):

  • 跨平臺(tái)支持強(qiáng)(Windows/Linux/macOS)
  • API 直觀、結(jié)構(gòu)清晰
  • 文檔豐富、社區(qū)活躍
  • 可集成至各種 Python 工具鏈中

注意事項(xiàng):

  • 某些操作(如殺死進(jìn)程、訪問別的用戶進(jìn)程)可能需要管理員權(quán)限
  • 大量遍歷系統(tǒng)進(jìn)程時(shí)注意異常處理(AccessDenied, NoSuchProcess)

到此這篇關(guān)于Python使用psutil實(shí)現(xiàn)系統(tǒng)監(jiān)控與資源管理的文章就介紹到這了,更多相關(guān)Python psutil監(jiān)控系統(tǒng)與資源內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python自動(dòng)化實(shí)現(xiàn)的簡(jiǎn)單使用

    python自動(dòng)化實(shí)現(xiàn)的簡(jiǎn)單使用

    本文主要介紹了python自動(dòng)化實(shí)現(xiàn)的簡(jiǎn)單使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python實(shí)現(xiàn)的網(wǎng)頁(yè)截圖功能【PyQt4與selenium組件】

    Python實(shí)現(xiàn)的網(wǎng)頁(yè)截圖功能【PyQt4與selenium組件】

    這篇文章主要介紹了Python實(shí)現(xiàn)的網(wǎng)頁(yè)截圖功能,結(jié)合實(shí)例形式分別描述了使用PyQt4組件與selenium組件進(jìn)行網(wǎng)頁(yè)截圖操作的相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • 解析Python中的二進(jìn)制位運(yùn)算符

    解析Python中的二進(jìn)制位運(yùn)算符

    這篇文章主要介紹了解析Python中的二進(jìn)制位運(yùn)算符,是Python學(xué)習(xí)中的基本知識(shí),需要的朋友可以參考下
    2015-05-05
  • python得到電腦的開機(jī)時(shí)間方法

    python得到電腦的開機(jī)時(shí)間方法

    今天小編就為大家分享一篇python得到電腦的開機(jī)時(shí)間方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python讀取英文文件并記錄每個(gè)單詞出現(xiàn)次數(shù)后降序輸出示例

    Python讀取英文文件并記錄每個(gè)單詞出現(xiàn)次數(shù)后降序輸出示例

    這篇文章主要介紹了Python讀取英文文件并記錄每個(gè)單詞出現(xiàn)次數(shù)后降序輸出,涉及Python文件讀取、字符串替換、分割以及字典遍歷、排序等相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • Python將字庫(kù)文件打包成可執(zhí)行文件的常見方法

    Python將字庫(kù)文件打包成可執(zhí)行文件的常見方法

    在 Python 打包時(shí),如果你想將字庫(kù)文件一起打包成一個(gè)可執(zhí)行文件,有幾種常見的方法,具體取決于你使用的打包工具,下面就跟隨小編一起了解下具體的實(shí)現(xiàn)方法吧
    2025-05-05
  • 深入探究PyTorch核心特性之自動(dòng)求導(dǎo)和優(yōu)化

    深入探究PyTorch核心特性之自動(dòng)求導(dǎo)和優(yōu)化

    在你已經(jīng)掌握了如何使用PyTorch構(gòu)建神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上,接下來我們將深入探討PyTorch的兩個(gè)核心特性:自動(dòng)求導(dǎo)(Autograd)和優(yōu)化(Optimization),這兩個(gè)特性在深度學(xué)習(xí)模型的訓(xùn)練過程中起著至關(guān)重要的作用,感興趣的同學(xué)一起來看看吧
    2023-07-07
  • Python matplotlib可視化實(shí)例解析

    Python matplotlib可視化實(shí)例解析

    這篇文章主要介紹了Python matplotlib可視化實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • django 實(shí)現(xiàn)簡(jiǎn)單的插入視頻

    django 實(shí)現(xiàn)簡(jiǎn)單的插入視頻

    這篇文章主要介紹了django 實(shí)現(xiàn)簡(jiǎn)單的插入視頻,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 淺析Python基礎(chǔ)-流程控制

    淺析Python基礎(chǔ)-流程控制

    Python編程語(yǔ)言的作用非常強(qiáng)大,而且其應(yīng)用方便的特點(diǎn)也對(duì)開發(fā)人員起到了非常大的作用。在這里我們就可以先從Python流程控制關(guān)鍵字的相關(guān)概念開始了解,從而初步掌握這一語(yǔ)言的特點(diǎn)
    2016-03-03

最新評(píng)論