我是否可以看到当前 python 应用程序正在使用的处理器使用量(最大值的百分比)?
场景:我的主机将允许我运行我的应用程序,只要它不消耗超过 X% 的 CPU 功率,所以我希望它“关注自身”并减速。那么我怎样才能知道应用程序使用了多少 CPU 呢?
目标平台是 *nix,但我也想在 Win 主机上进行。
我是否可以看到当前 python 应用程序正在使用的处理器使用量(最大值的百分比)?
场景:我的主机将允许我运行我的应用程序,只要它不消耗超过 X% 的 CPU 功率,所以我希望它“关注自身”并减速。那么我怎样才能知道应用程序使用了多少 CPU 呢?
目标平台是 *nix,但我也想在 Win 主机上进行。
>>> import os
>>> os.times()
(1.296875, 0.765625, 0.0, 0.0, 0.0)
>>> print os.times.__doc__
times() -> (utime, stime, cutime, cstime, elapsed_time)
Return a tuple of floating point numbers indicating process times.
从(2.5)手册:
次( )
返回一个浮点数的 5 元组,以秒为单位表示累积(处理器或其他)时间。这些项目是:用户时间、系统时间、孩子的用户时间、孩子的系统时间和自过去的固定点以来经过的实际时间,按此顺序。请参阅 Unix 手册页 times(2) 或相应的 Windows 平台 API 文档。可用性:Macintosh、Unix、Windows。
通过使用psutil:
>>> import psutil
>>> p = psutil.Process()
>>> p.cpu_times()
cputimes(user=0.06, system=0.03)
>>> p.cpu_percent(interval=1)
0.0
>>>
该resource
模块提供了getrusage
可以为您提供所需信息的模块,至少对于类 Unix 平台而言。
请注意,CPU 使用率始终是在一个时间间隔内测量的。本质上,它是你的程序做某事所花费的时间除以间隔时间。
例如,如果您的应用程序在 5 秒的时间段内占用了 2 秒的 CPU 时间,那么可以说它使用了 40% 的 CPU。
请注意,这种计算虽然看起来很简单,但在使用多处理器系统时可能会变得很棘手。如果您的应用程序在双处理器系统上的 5 秒挂钟时间中使用 7 秒的 CPU 时间,您说它是使用 140% 还是 70% 的 CPU?
更新:正如gimel提到的,该os.times
功能还以独立于平台的方式提供此信息。当然,上述计算说明仍然适用。
用于time.clock()
获取 CPU 时间。要获得 CPU 使用率,请执行 CPU time elapsed/time elapsed
例如,如果经过的 CPU 时间为 0.2,经过的时间为 1,则 CPU 使用率为 20%。
注意:您必须除以您拥有的处理器数量。如果您有 2 个即双核:
import decimal,timeit
decimal.getcontext().prec=1000
def torture():
decimal.Decimal(2).sqrt()
time.sleep(0.1)
import time
clock=time.clock()
while 1:
clock=timeit.timeit(torture,number=10)
tclock=time.clock()
print((tclock-clock)*p)
clock=tclock