psutil Process процессор в процентах больше 100

Итак, я создавал функцию монитора для отслеживания процесса тестирования.

Это функция

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)

Я получил использование процессора функцией, которую я отслеживал, но процент процессора () / количество процессоров был больше 100, я не понимаю, что происходит, может кто-нибудь объяснить.

причина, по которой я разделил на количество процессоров, приведена в этом сообщении


person Souldiv    schedule 28.07.2018    source источник


Ответы (2)


Из документа psutil: http://psutil.readthedocs.io/en/latest/#psutil.Process.cpu_percent

Вернуть число с плавающей запятой, представляющее использование ЦП процессом в процентах, которое также может быть> 100,0 в случае, если процесс выполняет несколько потоков на разных ЦП.

person Giampaolo Rodolà    schedule 28.07.2018
comment
Да это правильно. Но cpu_percent при делении на количество процессоров должен иметь процент ‹= 100, пожалуйста, внимательно прочтите вопрос. - person Souldiv; 29.07.2018

У меня была аналогичная проблема с использованием процессора около 300%, что не имеет смысла. Проблема решилась увеличением интервала времени. Вот пример того, как я это сделал:

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())
person WillemBoone    schedule 24.08.2020