2016-12-18 11 views
2

Im пытается измерить использование процессора в дереве процессов.psutil: Измерение использования процессора определенного процесса

В настоящее время получение cpu_usage процесса (без детей) будет делать, но я получаю странные результаты.

import psutil 
p = psutil.Process(PID) 
p.cpu_percent 

дает мне назад float>100, как это вообще возможно?

кстати PID является Идентификатором чего-то простого, как

def foo(): 
    i = 0 
    while True: 
     i += 1 

, который в соответствии с менеджером задач его использование процессора составляет около 12%

Я хочу, чтобы получить выход 12.5 или что-то в этом роде.

ответ

2

Я читал некоторые документы о psutil, и вот что я получил:

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

Так что для того, чтобы избавиться от> 100 вы должны сделать что-то вроде этого:

Примечание: возвращаемое значение explcitly не распределяется равномерно между всеми ядрами ЦП (в отличие от psutil.cpu_percent()). Это означает, что процесс цикла занятости, работающий в системе с двумя ядрами ЦП, будет передан как 100% загрузка процессора вместо 50%. Это было сделано для того, чтобы соответствовать «верхней» утилите UNIX, а также упростить идентификацию процессов, зависящих от ресурсов ЦП (независимо от количества ядер ЦП). Следует отметить, что в приведенном выше примере taskmgr.exe на Windows сообщит об использовании 50% вместо этого. Чтобы воспроизвести поведение taskmgr.exe в Windows, вы можете:

p.cpu_percent()/psutil.cpu_count().

Поскольку я получил этот ответ от где-то еще, я дам вам ссылку, чтобы проверить это из: http://psutil.readthedocs.io/en/release-2.2.1/#psutil.Process.cpu_percent