最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)域,開(kāi)發(fā)者常常需要獲取操作系統(tǒng)底層信息,如 CPU 使用率、內(nèi)存占用、磁盤(pán)讀寫(xiě)、網(wǎng)絡(luò)傳輸、進(jìn)程詳情等。雖然這些功能可以通過(guò) shell 命令實(shí)現(xiàn),如 top、df、ps、iostat 等,但在自動(dòng)化腳本和跨平臺(tái)開(kāi)發(fā)中,使用 Python 腳本來(lái)完成這些任務(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”的縮寫(xiě),它是一個(gè) 跨平臺(tái)的系統(tǒng)監(jiān)控庫(kù),用于:

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

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

二、安裝與基本使用

安裝方式

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

pip install psutil

安裝完成后,幾乎可以立即開(kāi)始使用,無(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}%")

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

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

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

2. 獲取磁盤(pán)使用情況

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í)磁盤(pán) IO 情況

io = psutil.disk_io_counters()
print(f"讀字節(jié): {io.read_bytes / 1024 ** 2:.2f} MB")
print(f"寫(xiě)字節(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"名稱(chēng): {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)限才能操作其他用戶(hù)的進(jìn)程。

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

你可以使用 psutil + rich 或 psutil + flask/streamlit 構(gòu)建漂亮的圖形或終端儀表盤(pán)。下面是一個(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 儀表盤(pán),甚至接入 Grafana、Prometheus 進(jìn)行數(shù)據(jù)上報(bào)。

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

1. 編寫(xiě)一個(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ù),它幾乎可以滿(mǎn)足你對(duì)操作系統(tǒng)資源訪問(wèn)的一切需求,包括但不限于:

  • 任務(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)程、訪問(wèn)別的用戶(hù)進(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?中如何使用requests模塊發(fā)布表單數(shù)據(jù)

    Python?中如何使用requests模塊發(fā)布表單數(shù)據(jù)

    requests 庫(kù)是 Python 的主要方面之一,用于創(chuàng)建對(duì)已定義 URL 的 HTTP 請(qǐng)求,本篇文章介紹了 Python requests 模塊,并說(shuō)明了我們?nèi)绾问褂迷撃K在 Python 中發(fā)布表單數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • 深入探討Python中切片賦值的高級(jí)技巧指南

    深入探討Python中切片賦值的高級(jí)技巧指南

    本文將深入探討Python切片賦值的高級(jí)技巧,重點(diǎn)解析步長(zhǎng)操作和多維數(shù)據(jù)處理的實(shí)用方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2026-02-02
  • 詳解Python中最常用的10個(gè)內(nèi)置函數(shù)

    詳解Python中最常用的10個(gè)內(nèi)置函數(shù)

    Python作為一種多用途編程語(yǔ)言,擁有豐富的內(nèi)置函數(shù)庫(kù),這些函數(shù)可以極大地提高開(kāi)發(fā)效率,本文將介紹Python中最常用的10個(gè)內(nèi)置函數(shù),我們將深入了解每個(gè)函數(shù),并提供示例代碼以幫助您更好地理解它們,需要的朋友可以參考下
    2023-11-11
  • python聚類(lèi)算法選擇方法實(shí)例

    python聚類(lèi)算法選擇方法實(shí)例

    在本篇文章里小編給大家整理的是一篇關(guān)于python聚類(lèi)算法選擇方法實(shí)例,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-07-07
  • 基于Python開(kāi)發(fā)批量提取Excel圖片的小工具

    基于Python開(kāi)發(fā)批量提取Excel圖片的小工具

    這篇文章主要為大家詳細(xì)介紹了如何使用Python中的openpyxl庫(kù)開(kāi)發(fā)一個(gè)小工具,可以實(shí)現(xiàn)批量提取Excel圖片,有需要的小伙伴可以參考一下
    2025-03-03
  • Python?seaborn?barplot畫(huà)圖案例

    Python?seaborn?barplot畫(huà)圖案例

    這篇文章主要介紹了Python?seaborn?barplot畫(huà)圖案例,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • Python實(shí)現(xiàn)樸素貝葉斯的學(xué)習(xí)與分類(lèi)過(guò)程解析

    Python實(shí)現(xiàn)樸素貝葉斯的學(xué)習(xí)與分類(lèi)過(guò)程解析

    這篇文章主要介紹了Python實(shí)現(xiàn)樸素貝葉斯的學(xué)習(xí)與分類(lèi)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python在Console下顯示文本進(jìn)度條的方法

    Python在Console下顯示文本進(jìn)度條的方法

    Python是一門(mén)與php有點(diǎn)像的編輯語(yǔ)言了,下文來(lái)給各位在利用Python實(shí)現(xiàn)進(jìn)度條了,對(duì)Python在Console下顯示文本進(jìn)度條的方法相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • python+selenium+PhantomJS抓取網(wǎng)頁(yè)動(dòng)態(tài)加載內(nèi)容

    python+selenium+PhantomJS抓取網(wǎng)頁(yè)動(dòng)態(tài)加載內(nèi)容

    一般我們使用python的第三方庫(kù)requests及框架scrapy來(lái)爬取網(wǎng)上的資源,但是設(shè)計(jì)javascript渲染的頁(yè)面卻不能抓取,此 時(shí),我們使用web自動(dòng)化測(cè)試化工具Selenium+無(wú)界面瀏覽器PhantomJS來(lái)抓取javascript渲染的頁(yè)面,下面實(shí)現(xiàn)一個(gè)簡(jiǎn)單的爬取
    2020-02-02
  • Python類(lèi)反射機(jī)制使用實(shí)例解析

    Python類(lèi)反射機(jī)制使用實(shí)例解析

    這篇文章主要介紹了Python類(lèi)反射機(jī)制使用實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論

凤阳县| 台州市| 山阴县| 乾安县| 建阳市| 桂林市| 辽中县| 禹城市| 清丰县| 和平县| 宁明县| 榕江县| 吉木乃县| 潼关县| 巴中市| 开阳县| 鄯善县| 通海县| 彭州市| 石阡县| 咸宁市| 拜泉县| 加查县| 榆树市| 伽师县| 许昌县| 江都市| 洛隆县| 长葛市| 阜城县| 兖州市| 西宁市| 德江县| 邵武市| 宝兴县| 博客| 武汉市| 岫岩| 靖边县| 铅山县| 习水县|