在现代软件开发中,程序的监控与管理是一项重要的任务。通过监控系统资源的使用情况,我们可以及时发现潜在的问题并优化程序性能。Python 的 psutil
库和 subprocess
模块为这一需求提供了强大的支持。本文将介绍如何利用这两个库实现程序监控与管理。
一、环境准备
在开始之前,我们需要安装 psutil
库。可以通过以下命令安装:
pip install psutil
二、psutil 库简介
psutil
是一个跨平台的库,用于获取系统和进程相关的信息,如 CPU、内存、磁盘以及网络的使用情况等。它可以让我们轻松监控系统资源的使用状态。
三、subprocess 模块简介
subprocess
模块用于创建新进程,与它们进行交互。我们可以用它来启动新的程序并监控其状态。
四、监控程序示例
以下示例代码将展示如何使用 psutil
和 subprocess
来监控一个简单的 Python 程序。
我们首先创建一个待监控的简单 Python 脚本 sample_script.py
,其内容如下:
import time
while True:
time.sleep(1)
该脚本会每秒钟休眠一次。接下来,我们利用主脚本来启动和监控这个程序。
import psutil
import subprocess
import time
# 启动一个新的 Python 子进程
proc = subprocess.Popen(['python', 'sample_script.py'])
try:
while True:
# 获取子进程的信息
process = psutil.Process(proc.pid)
# 获取 CPU 使用率
cpu_usage = process.cpu_percent(interval=1)
# 获取内存使用情况
memory_info = process.memory_info()
memory_usage = memory_info.rss / (1024 * 1024) # 转换为 MB
# 打印监控信息
print(f'进程 ID: {proc.pid}, CPU 使用率: {cpu_usage}%, 内存使用: {memory_usage:.2f} MB')
# 设定监控间隔
time.sleep(2)
except KeyboardInterrupt:
print("监控结束,正在终止子进程...")
proc.terminate() # 终止子进程
proc.wait() # 等待子进程结束
print("子进程已终止。")
五、代码说明
- 启动子进程:使用
subprocess.Popen()
来启动sample_script.py
。 - 监控资源:在主循环中,使用
psutil.Process()
获取子进程的资源使用信息。我们通过cpu_percent()
和memory_info()
分别获取 CPU 使用率和内存使用情况。 - 输出监控信息:打印当前进程的 CPU 和内存使用情况。
- 结束监控:通过捕获
KeyboardInterrupt
,允许用户手动停止监控,并调用proc.terminate()
来结束子进程。
六、总结
通过以上示例,我们展示了如何使用 psutil
和 subprocess
实现基本的程序监控与管理。同时,这个监控系统可以根据具体需求进行扩展,比如增加日志记录、发送警报等功能。利用这两个强大的库,我们可以更好地管理程序,提高系统的稳定性与性能。