【问题标题】:CPU Usage Per Process in PythonPython中每个进程的CPU使用率
【发布时间】:2008-11-09 18:35:14
【问题描述】:

我是否可以查看当前 Python 应用正在使用的处理器使用量(最大值的百分比)?

场景: 我的主机将允许我运行我的应用程序,只要它不消耗超过 X% 的 CPU 功率,所以我希望它“密切关注自身”并放慢速度。那么我如何知道应用程序使用了多少 CPU?

目标平台是 *nix,不过我也想在 Win 主机上做。

【问题讨论】:

    标签: python monitoring cpu-usage


    【解决方案1】:
    >>> 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。

    【讨论】:

      【解决方案2】:

      通过使用psutil

      >>> import psutil
      >>> p = psutil.Process()
      >>> p.cpu_times()
      cputimes(user=0.06, system=0.03)
      >>> p.cpu_percent(interval=1)
      0.0
      >>> 
      

      【讨论】:

        【解决方案3】:

        resource 模块提供了getrusage,它可以为您提供所需的信息,至少对于类 Unix 平台而言。

        请注意,CPU 使用率始终是在一段时间内测量的。本质上,它是你的程序做某事所花费的时间除以间隔时间。

        例如,如果您的应用程序在 5 秒的时间段内占用了 2 秒的 CPU 时间,那么可以说它使用了 40% 的 CPU。

        请注意,这种计算虽然看起来很简单,但在使用多处理器系统时可能会变得很棘手。如果您的应用程序在双处理器系统上的 5 秒挂钟时间中使用 7 秒的 CPU 时间,您说它是使用 140% 还是 70% 的 CPU?

        更新:正如gimel 提到的,os.times 函数也以独立于平台的方式提供此信息。当然,上述计算说明仍然适用。

        【讨论】:

        • 我看到的问题是,这更多的是衡量 CPU 时间的多少,虽然这可能会有所帮助,但我认为它不会帮助解决这个问题,因为我需要知道现在 appX 正在使用总 CPU 容量的 10%。
        • “现在”,每个进程在单处理器系统上使用 100% - 在任何时间点只有一个进程在运行,它是要求其资源消耗的进程。每秒拍摄一次使用情况的快照,然后计算您在最后一秒使用了多少 CPU。
        【解决方案4】:

        使用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
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-11
        • 2012-03-05
        • 2012-12-12
        • 1970-01-01
        • 1970-01-01
        • 2021-06-06
        相关资源
        最近更新 更多