Использование процессора в процессе в 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