0

我正在尝试使用 psutil 模块编写一个非常简单的 python 脚本来返回进程 ID、创建时间、名称和 CPU %。最终,我将使用它来监控基于这些返回值的特定阈值,但对于我们的案例,我将使用一个简单的示例

  • 操作系统:CentOS 6.5
  • Python:2.6.6(基本 CentOS 6 软件包)
  • psutil:0.6.1

当我运行以下脚本时,它会返回除 cpu_percent 之外的所有内容的正确值。它为每个进程返回 0.0。我认为问题是由于 cpu_percent 的默认间隔为 0。我正在使用 psutil.process_iter() 和 as_dict 来遍历正在运行的进程。我不确定如何设置间隔。有什么我想念的吗?

#! /usr/bin/python
import psutil

for proc in psutil.process_iter():
    try:
        pinfo = proc.as_dict(attrs=['pid', 'name', 'create_time', 'get_cpu_percent'])
    except psutil.NoSuchProcess:
        pass
    else:
        print(pinfo)
4

1 回答 1

0

根据文档,get_cpu_percent将允许您测量特定进程用作阻塞测量的 CPU 时间量。例如:

import psutil
import os

# Measure the active process in a blocking method,
#    blocks for 1 second to measure the CPU usage of the process
print psutil.Process(os.getpid()).get_cpu_percent(interval=1)
# Measure the percentage of change since the last blocking measurement.
print psutil.Process(os.getpid()).get_cpu_percent()

相反,您可能希望get_cpu_times在报告中使用。

>>> help(proc.get_cpu_times)
Help on method get_cpu_times in module psutil:

get_cpu_times(self) method of psutil.Process instance
    Return a tuple whose values are process CPU user and system
    times. The same as os.times() but per-process.

>>> pinfo = psutil.Process(os.getpid()).as_dict(attrs=['pid', 'name', 'create_time', 'get_cpu_times'])
>>> print (pinfo.get('cpu_times').user, pinfo.get('cpu_times').system)
(0.155494768, 0.179424288)
于 2015-01-07T22:20:44.220 回答