Загрузка процессора на процесс в Python - PullRequest
14 голосов
/ 09 ноября 2008

Могу ли я увидеть объем использования процессора (% от максимума), который использует текущее приложение python?

Сценарий: Мой хост позволит мне запускать мое приложение, пока оно не потребляет более X% мощности процессора, поэтому я бы хотел, чтобы оно «следило за собой» и замедлялось. Так как же узнать, сколько процессора использует приложение?

Целевой платформой является * nix, однако я бы хотел сделать это и на хосте Win.

Ответы [ 4 ]

26 голосов
/ 09 ноября 2008
>>> 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) руководства:

раз ()

Возвращает 5-кратное число чисел с плавающей запятой, указывающих накопленное (процессор или другое) время в секундах. Элементы: пользовательское время, системное время, детское пользовательское время, детское системное время и прошедшее реальное время с фиксированной точки в прошлом, в указанном порядке. Обратитесь к руководству по Unix (2) или к соответствующей документации по Windows Platform API. Доступность: Macintosh, Unix, Windows.

12 голосов
/ 07 июня 2011

Используя psutil :

>>> import psutil
>>> p = psutil.Process()
>>> p.cpu_times()
cputimes(user=0.06, system=0.03)
>>> p.cpu_percent(interval=1)
0.0
>>> 
6 голосов
/ 09 ноября 2008

Модуль resource предоставляет getrusage, который может предоставить вам необходимую информацию, по крайней мере, для Unix-подобных платформ.

Обратите внимание, что загрузка процессора в процентах всегда измеряется в течение определенного промежутка времени. По сути, это количество времени, затраченное вашей программой на выполнение чего-либо, деленное на интервал времени.

Например, если ваше приложение занимает 2 секунды процессорного времени в течение 5-секундного периода, то можно сказать, что оно использует 40% процессорного времени.

Обратите внимание, что такой простой расчет может показаться сложным при использовании многопроцессорной системы. Если ваше приложение использует 7 секунд процессорного времени за 5 секунд настенного времени в двухпроцессорной системе, вы говорите, что оно использует 140% или 70% процессорного времени?

Обновление: Как упоминает gimel , функция os.times также предоставляет эту информацию независимо от платформы. Вышеуказанные примечания к расчетам все еще применяются, конечно.

0 голосов
/ 27 января 2011

Используйте 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
...