无论区间值如何,代码始终返回 0.0 值。
import psutil
p = psutil.Process()
print p.cpu_percent(interval=1)
print p.cpu_percent(interval=None)
这种行为记录在案:
当interval 是
0.0
或None
将处理时间与自上次调用以来经过的系统CPU 时间进行比较时,立即返回。这意味着第一次调用它时,它会返回一个0.0
你应该忽略的无意义的值。在这种情况下,为了准确起见,建议第二次调用此函数,两次调用之间至少0.1
间隔几秒钟。
还有一个警告不要使用interval=None
单个调用:
警告:第一次使用间隔=调用此函数时
0.0
,None
它将返回一个0.0
您应该忽略的无意义值。
如果使用interval=None
,请确保调用.cpu_percent
与先前调用相比。
p = psutil.Process(pid=pid)
p.cpu_percent(interval=None)
for i in range(100):
usage = p.cpu_percent(interval=None)
# do other things
代替:
for i in range(100):
p = psutil.Process(pid=pid)
p.cpu_percent(interval=None)
# do other things
Process 对象的 cpu 是可变的。我已经为你做了一些测试。
for i in range(10):
p = psutil.Process(3301)
print p.cpu_percent(interval=0.1)
结果:
9.9 0.0 0.0 0.0 0.0 9.9 0.0 9.9 0.0 0.0
因此,如果您想获取 Process 对象的 CPU 百分比,您可以在特定时间取平均值。
test_list = []
for i in range(10):
p = psutil.Process(6601)
p_cpu = p.cpu_percent(interval=0.1)
test_list.append(p_cpu)
print float(sum(test_list))/len(test_list)
结果:
1.98
监控当前进程,即,p = psutil.Process()
或p = psutil.Process(os.getpid())
p.cpu_percent()
将始终为您呈现 0.0,因为它会阻止您当前的进程。在阻塞期间,cpu百分比实际上是0.0;p.cpu_percent()
之后立即调用另一个p.cpu_percent()
也将返回 0.0。两次通话之间的时间太短,psutil
无法正确监控。因此,请确保两次通话之间至少间隔 0.1 秒。监控其他进程,即p = psutil.Process(other_pid)
cpu_percent()
太快调用函数,原因同上。另一个注意事项:
p = psutil.Process()
应该只调用一次并在p
之后重用,而不是每次调用之前都调用它p.cpu_percent()
;否则,您实际上是cpu_percent()
在第一次调用时调用函数p.cpu_percent()
,意外返回值 0.0。
从我自己的有效代码中:
cpu = psutil.cpu_times_percent(interval=0.4, percpu=False)