在现代软件开发中,程序的监控与管理是一项重要的任务。通过监控系统资源的使用情况,我们可以及时发现潜在的问题并优化程序性能。Python 的 psutil 库和 subprocess 模块为这一需求提供了强大的支持。本文将介绍如何利用这两个库实现程序监控与管理。

一、环境准备

在开始之前,我们需要安装 psutil 库。可以通过以下命令安装:

pip install psutil

二、psutil 库简介

psutil 是一个跨平台的库,用于获取系统和进程相关的信息,如 CPU、内存、磁盘以及网络的使用情况等。它可以让我们轻松监控系统资源的使用状态。

三、subprocess 模块简介

subprocess 模块用于创建新进程,与它们进行交互。我们可以用它来启动新的程序并监控其状态。

四、监控程序示例

以下示例代码将展示如何使用 psutilsubprocess 来监控一个简单的 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("子进程已终止。")

五、代码说明

  1. 启动子进程:使用 subprocess.Popen() 来启动 sample_script.py
  2. 监控资源:在主循环中,使用 psutil.Process() 获取子进程的资源使用信息。我们通过 cpu_percent()memory_info() 分别获取 CPU 使用率和内存使用情况。
  3. 输出监控信息:打印当前进程的 CPU 和内存使用情况。
  4. 结束监控:通过捕获 KeyboardInterrupt,允许用户手动停止监控,并调用 proc.terminate() 来结束子进程。

六、总结

通过以上示例,我们展示了如何使用 psutilsubprocess 实现基本的程序监控与管理。同时,这个监控系统可以根据具体需求进行扩展,比如增加日志记录、发送警报等功能。利用这两个强大的库,我们可以更好地管理程序,提高系统的稳定性与性能。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部