Использование процессора в процессе в Python
Возможно ли увидеть количество использования процессора (% от максимального), которое использует текущий, python, приложение?
Сценарий:
Мой хост позволит мне запускать мое приложение, если оно не потребляет больше X% от мощности процессора, поэтому я бы хотел, чтобы он "следил за собой" и замедлялся. Итак, как я могу узнать, сколько процессор использует приложение?
Целевая платформа - это * nix, однако я бы тоже хотел сделать это на хосте Win.
Ответы
Ответ 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):
times()
Возвращает 5-битный номер чисел с плавающей запятой, указывающий накопленные (процессор или другие) времена, в секундах. Элементами являются: пользовательское время, системное время, детское пользовательское время, системное время для детей и прошедшее реальное время с фиксированной точки в прошлом, в указанном порядке. См. Временные страницы справочной системы Unix (2) или соответствующую документацию API платформы Windows. Доступность: 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-подобных платформ.
Обратите внимание, что использование процессора в процентах всегда измеряется за промежуток времени. По сути, это время, затрачиваемое вашей программой на то, что делится на интервал времени.
Например, если ваше приложение занимает 2 секунды времени процессора в течение 5 секунд, то можно сказать, что он использует 40% CPU.
Обратите внимание, что этот расчет, как ни странно, может оказаться сложным при использовании многопроцессорной системы. Если ваше приложение использует 7 секунд времени процессора в 5 секунд времени настенных часов в двухпроцессорной системе, вы говорите, что использует 140% или 70% CPU?
Обновление. Как упоминается gimel, функция os.times
также предоставляет эту информацию независимым от платформы способом. Приведенные выше примечания к расчетам все же применяются, конечно.
Ответ 4
Используйте time.clock()
, чтобы получить время процессора.
Чтобы получить процент использования ЦП, время истечения времени процессора/времени
Например, если истекшее время процессора равно 0,2, и время, прошедшее с момента истечения 1, то использование процессора составляет 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