psutil进程cpu百分比大于100

时间:2018-07-28 12:50:48

标签: python python-3.x multiprocessing psutil

因此,我正在创建一个监视功能来监视基准测试过程。

这是功能

def monitor(target):
    worker_process = mp.Process(target=target, args=(5, bounds, num_particles, max_iter, None))
    worker_process.start()
    p = psutil.Process(worker_process.pid)
    cpu_percents = []
    while worker_process.is_alive():
      test = p.cpu_percent()
      if test != 0.0:
         cpu_percents.append(test)

    worker_process.join()
    return cpu_percents
cpu_percents = monitor(target=GSO)

我得到了我正在监视的功能的cpu用法,但是cpu percent()/ cpus数大于100,我不知道发生了什么,有人可以解释。

reason why i have divided by number of cpus is given in this post

2 个答案:

答案 0 :(得分:0)

来自psutil文档:http://psutil.readthedocs.io/en/latest/#psutil.Process.cpu_percent

  

返回一个以百分比表示进程CPU利用率的浮点数,如果进程在不同的CPU上运行多个线程,则浮点数也可以> 100.0。

答案 1 :(得分:0)

我在300%左右的CPU使用率方面也遇到了类似的问题,这毫无意义。通过增加间隔时间来解决该问题。这是我的操作方式示例:

import psutil
import pandas as pd
import time
import multiprocessing


def get_running_aps(interval=20):
    df = pd.DataFrame(columns=['pid', 'name', 'username', 'status', 'cpu_percent'])

    # this is t0 (start of interval)
    for proc in psutil.process_iter(['pid', 'name', 'username', 'status', 'cpu_percent']):
        pass

    # interval time waiting
    for i in range(interval):
        print("#" * (interval - i))
        time.sleep(1)

    # measure a second time, now save the results
    for proc in psutil.process_iter(['pid', 'name', 'username', 'status', 'cpu_percent']):
        df = df.append(proc.info, ignore_index=True)
    
    # divide by the number of cpu's
    df.cpu_percent = df.cpu_percent/multiprocessing.cpu_count()

    df = df.sort_values(['cpu_percent'], ascending=False)
    return df


if __name__ == "__main__":
    df = get_running_aps()
    print(df.head())