如何在Python中获取过去10分钟的CPU使用率

3

我可以使用以下代码获取当前CPU使用情况:

import psutil as PSUTIL
PSUTIL.cpu_percent(interval=1)

我的问题是:如何获取过去10分钟的CPU使用情况?


不认为这是可能的,我个人认为。但你可以使用一个计时器,在一个while循环中记录十分钟的数据,然后绘制它。 - ajsp
4个回答

2

使用cronjob在后台运行python脚本
1)打开终端并输入crontab -e
2)编辑文件并编写以下代码以在后台运行python脚本

*/1 * * * * python /yourpath/yourpythonfile.py 

3) 创建 yourpythonfile.py 文件并编写以下代码

import psutil as PSUTIL 
    with open('/yourpath/yourfile.txt', "a") as myfile:
       myfile.write(str(PSUTIL.cpu_percent(interval=1))+"%"'\n')

2
这个想法是:
  1. 使用threading模块或系统服务/守护进程创建后台任务。让它与你的主代码同时运行;
  2. 在后台任务中创建一个计时器。每次计时器的滴答声都会询问CPU使用情况,并将其写入一个数组中。
  3. 当主代码需要CPU负载统计信息时,通过IPC文件等方式从后台任务传递。
具体解决方案取决于您可以使用什么工具。

这是一个合乎逻辑且令人难以置信的想法。您能否进一步阐述一下,如果针对一个包含几个函数(例如A、B和C)的简单Python程序,该如何使用此方法?一个人应该如何获取这些3个函数的“统计数据”? - Pe Dro

1
要测量CPU使用率,您需要比较两个给定时间的使用情况;您无法从过去获取测量点(除非您像@ajsp建议的那样存储它)。
例如:
import psutil
import time

def calculate(t1, t2):
    # from psutil.cpu_percent()
    # see: https://github.com/giampaolo/psutil/blob/master/psutil/__init__.py
    t1_all = sum(t1)
    t1_busy = t1_all - t1.idle
    t2_all = sum(t2)
    t2_busy = t2_all - t2.idle
    if t2_busy <= t1_busy:
        return 0.0
    busy_delta = t2_busy - t1_busy
    all_delta = t2_all - t1_all
    busy_perc = (busy_delta / all_delta) * 100
    return round(busy_perc, 1)

cpu_time_a = (time.time(), psutil.cpu_times())
# your code taking time
cpu_time_b = (time.time(), psutil.cpu_times())
print 'CPU used in %d seconds: %s' % (
    cpu_time_b[0] - cpu_time_a[0],
    calculate(cpu_time_a[1], cpu_time_b[1])
)

或者您可以使用cpu_percent(interval=600); 如果您不想阻塞脚本中的其他代码,您可能需要在单独的线程中执行。

但是像先前提到的那样,在这两种情况下,它都不会返回时间; 只是从现在开始测量CPU时间到interval

如果您只需要跟踪CPU使用情况而不想重新发明轮子,则可以使用:

这些解决方案可以帮助您保存系统指标以供处理。


0

您可以使用os.getloadavg()来查找过去1、5和15分钟服务器的平均负载。

也许这对您打算做的事情有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接