You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python测量进程A及其所有子孙进程的CPU使用率

如何用Python测量进程A及其所有子孙进程的CPU使用率快照

要实现这个需求,我们可以借助psutil库(跨平台进程监控工具)来遍历进程树并统计CPU使用率,以下是具体步骤和代码实现:

1. 安装依赖库

首先需要安装psutil,它是处理进程相关操作的首选Python库:

pip install psutil

2. 核心实现步骤

2.1 遍历进程树

通过进程A的PID,我们可以直接获取它的所有子孙进程。psutil提供了内置方法来获取整个进程树,无需手动递归。

2.2 统计整体CPU使用率

CPU使用率是一段时间内的统计值,不存在绝对的“瞬时快照”,我们可以通过短时间窗口内的CPU时间差计算平均使用率,以此近似快照值。

3. 完整代码示例

import psutil
import time
from multiprocessing import Process

def process_a_func():
    # 示例:进程A的业务逻辑,可在此创建子进程
    time.sleep(5)

def get_process_tree(pid):
    """获取指定PID及其所有子孙进程的Process对象"""
    try:
        parent_proc = psutil.Process(pid)
        # 包含父进程本身 + 所有递归子进程
        process_list = [parent_proc] + parent_proc.children(recursive=True)
        return process_list
    except psutil.NoSuchProcess:
        print(f"错误:进程 {pid} 不存在")
        return []

def calculate_total_cpu(processes, interval=0.1):
    """计算进程列表的总CPU使用率"""
    if not processes:
        return 0.0

    # 初始化CPU使用率统计(第一次调用返回0,用于后续对比)
    for proc in processes:
        try:
            proc.cpu_percent(interval=None)
        except (psutil.NoSuchProcess, psutil.AccessDenied):
            pass

    time.sleep(interval)

    total_usage = 0.0
    for proc in processes:
        try:
            # 获取自上次调用以来的CPU使用率
            usage = proc.cpu_percent(interval=None)
            total_usage += usage
        except (psutil.NoSuchProcess, psutil.AccessDenied):
            # 忽略已退出或无权限访问的进程
            continue

    return total_usage

if __name__ == "__main__":
    # 启动进程A
    proc_a = Process(target=process_a_func)
    proc_a.start()
    # 等待进程A完成初始化
    time.sleep(0.5)

    # 获取进程A的完整进程树
    process_tree = get_process_tree(proc_a.pid)
    # 计算总CPU使用率
    total_cpu_usage = calculate_total_cpu(process_tree)
    print(f"进程A及其所有子孙进程的总CPU使用率:{total_cpu_usage:.2f}%")

    # 清理进程
    proc_a.join()

关键说明

  • CPU使用率的含义:返回的总使用率是所有进程的CPU使用率之和,例如在4核CPU上,两个满负荷运行的进程总使用率为200%。
  • 异常处理:测量过程中可能出现进程退出、无权限访问等情况,需捕获psutil.NoSuchProcess和psutil.AccessDenied异常。
  • 间隔时间调整:interval参数控制统计窗口的长度,值越小越接近“快照”,但过小会增加统计误差,推荐设置为0.1-1秒。
  • 跨平台支持:psutil兼容Windows、Linux、macOS等主流操作系统,无需针对不同系统修改代码。

内容的提问来源于stack exchange,提问作者konchy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:57:29