Python神器:psutil库使用详解

Python神器:psutil库使用详解

psutil 是 Python 中一个功能强大的第三方库,用于获取系统的运行状况和硬件信息,如 CPU、内存、磁盘、网络等资源的使用情况。这使得它在系统监控、资源管理和性能调试等场景中大有用途。

本文将全面介绍 psutil 的使用,配以详细代码示例和图解,助你快速上手这一神器!


一、psutil 的安装与基本概念

1.1 安装

在命令行中运行以下命令安装 psutil

pip install psutil

1.2 psutil 能做什么?

  • CPU 信息:获取 CPU 使用率、逻辑/物理核心数等。
  • 内存信息:包括总内存、可用内存、内存占用率等。
  • 磁盘信息:获取磁盘分区、使用情况和 IO 信息。
  • 网络信息:查看网络接口、连接状态和流量统计。
  • 进程管理:列举和管理系统进程。

二、获取系统资源信息

2.1 获取 CPU 信息

示例代码

import psutil

# CPU 核心数
print(f"物理核心数: {psutil.cpu_count(logical=False)}")
print(f"逻辑核心数: {psutil.cpu_count(logical=True)}")

# CPU 使用率
print(f"CPU 使用率: {psutil.cpu_percent(interval=1)}%")

# 每个核心的使用率
print(f"每个核心的使用率: {psutil.cpu_percent(interval=1, percpu=True)}")

输出示例

物理核心数: 4
逻辑核心数: 8
CPU 使用率: 12.3%
每个核心的使用率: [5.3, 10.1, 20.7, 12.9, 4.8, 7.5, 15.2, 10.6]

图解


2.2 获取内存信息

示例代码

# 获取内存使用情况
memory_info = psutil.virtual_memory()
print(f"总内存: {memory_info.total / 1024**3:.2f} GB")
print(f"已用内存: {memory_info.used / 1024**3:.2f} GB")
print(f"可用内存: {memory_info.available / 1024**3:.2f} GB")
print(f"内存使用率: {memory_info.percent}%")

输出示例

总内存: 16.00 GB
已用内存: 8.24 GB
可用内存: 7.76 GB
内存使用率: 51.5%

图解

一个简单的内存使用率饼图可以清晰展示当前内存的占用情况:


2.3 获取磁盘信息

示例代码

# 获取磁盘分区
partitions = psutil.disk_partitions()
for partition in partitions:
    print(f"分区设备: {partition.device}")
    print(f"挂载点: {partition.mountpoint}")
    print(f"文件系统类型: {partition.fstype}")

# 获取磁盘使用情况
disk_usage = psutil.disk_usage('/')
print(f"磁盘总容量: {disk_usage.total / 1024**3:.2f} GB")
print(f"已用空间: {disk_usage.used / 1024**3:.2f} GB")
print(f"可用空间: {disk_usage.free / 1024**3:.2f} GB")
print(f"磁盘使用率: {disk_usage.percent}%")

输出示例

分区设备: /dev/sda1
挂载点: /
文件系统类型: ext4
磁盘总容量: 512.00 GB
已用空间: 120.23 GB
可用空间: 391.77 GB
磁盘使用率: 23.5%

2.4 获取网络信息

示例代码

# 获取网络接口信息
net_io = psutil.net_io_counters()
print(f"已发送数据: {net_io.bytes_sent / 1024**2:.2f} MB")
print(f"已接收数据: {net_io.bytes_recv / 1024**2:.2f} MB")

# 获取网络连接信息
connections = psutil.net_connections(kind='inet')
for conn in connections[:5]:  # 仅展示前 5 条连接
    print(f"本地地址: {conn.laddr}, 远程地址: {conn.raddr}, 状态: {conn.status}")

输出示例

已发送数据: 50.32 MB
已接收数据: 120.89 MB
本地地址: 127.0.0.1:8080, 远程地址: None, 状态: LISTEN
本地地址: 192.168.1.5:52415, 远程地址: 192.168.1.1:80, 状态: ESTABLISHED

三、进程管理

3.1 列举所有进程

示例代码

# 获取所有进程
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
    print(f"PID: {proc.info['pid']}, 名称: {proc.info['name']}, CPU 使用率: {proc.info['cpu_percent']}%")

示例输出

PID: 1, 名称: systemd, CPU 使用率: 0.0%
PID: 1234, 名称: python3, CPU 使用率: 10.3%
PID: 5678, 名称: chrome, CPU 使用率: 5.2%

3.2 操作进程

示例代码

# 获取某个进程的信息
pid = 1234  # 替换为实际 PID
try:
    process = psutil.Process(pid)
    print(f"进程名: {process.name()}")
    print(f"进程状态: {process.status()}")
    print(f"内存使用: {process.memory_info().rss / 1024**2:.2f} MB")
    print(f"CPU 使用率: {process.cpu_percent(interval=1)}%")
    
    # 杀死进程
    process.terminate()
    print(f"进程 {pid} 已终止")
except psutil.NoSuchProcess:
    print(f"进程 {pid} 不存在")

四、实时监控示例

一个实时监控系统资源的 Python 程序:

import psutil
import time

while True:
    cpu = psutil.cpu_percent(interval=1)
    memory = psutil.virtual_memory().percent
    disk = psutil.disk_usage('/').percent
    print(f"CPU: {cpu}%, 内存: {memory}%, 磁盘: {disk}%")
    time.sleep(1)

运行后可以实时查看系统的资源占用情况。


五、总结

psutil 是一个功能全面且易用的 Python 库,适用于多种场景,包括:

  • 开发系统监控工具;
  • 实现资源管理与性能调试;
  • 构建服务器性能监控脚本。

通过本文的详细教程,相信你已经掌握了 psutil 的核心功能,并能灵活运用于实际项目中!

最后修改于:2024年11月30日 21:18

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日