gpt4 book ai didi

python - 运行外部命令并获取它消耗的 CPU 量

转载 作者:太空狗 更新时间:2023-10-30 00:23:00 31 4
gpt4 key购买 nike

很简单,我想从 Python 脚本中运行外部命令/程序,完成后我还想知道它消耗了多少 CPU 时间。

困难模式:并行运行多个命令不会导致 CPU 消耗结果不准确。

最佳答案

在 UNIX 上: (a) 使用 resource模块(另见 icktoofay 的回答),或 (b) 使用 time命令并解析结果,或 (c) 使用 /proc文件系统,解析/proc/[pid]/stat 并解析出 utimestime 字段。最后一个是特定于 Linux 的。

使用资源的例子:

import subprocess, resource
usage_start = resource.getrusage(resource.RUSAGE_CHILDREN)
subprocess.call(["yourcommand"])
usage_end = resource.getrusage(resource.RUSAGE_CHILDREN)
cpu_time = usage_end.ru_utime - usage_start.ru_utime

注意:没有必要执行 fork/execvp、subprocess.call() 或其他 subprocess这里的方法很好,而且更容易使用。

注意:您可以使用 subprocess.Popen 或 subprocess.call 和线程从同一个 python 脚本同时运行多个命令,但资源不会返回它们正确的单个 cpu 时间,它会返回它们之间的时间总和调用 getrusage;要获得单独的时间,请为每个命令运行一个小的 python 包装器以如上所述计时(可以从您的主脚本启动它们),或者使用 time 方法,使用多个同时命令正确工作(时间基本上就是这样一个包装器)。

使用时间的例子:

import subprocess, StringIO
time_output = StringIO.StringIO()
subprocess.call(["time", "yourcommand", "youroptions"], stdout=time_output)
# parse time_output

在 Windows 上:您需要以某种方式使用性能计数器(又名“性能数据助手”)。这是一个 C example底层API。要从 python 获取它,您可以使用两个模块之一:win32pdh (pywin32 的一部分;sample code)或pyrfcon (跨平台,也适用于 Unix;sample code)。

这些方法中的任何一个实际上都满足上面的“困难模式”要求:即使在繁忙的系统上有多个不同进程的运行实例,它们也应该是准确的。与在空闲系统上仅运行一个进程相比,它们在那种情况下可能不会产生完全相同的结果,因为进程切换确实有一些开销,但它们将非常接近,因为它们最终从操作系统调度程序获取数据。

关于python - 运行外部命令并获取它消耗的 CPU 量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13889066/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com