2008-11-09 8 views
14

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

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

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

ответ

25
>>> 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) или соответствующую документацию API платформы Windows. Доступность: Macintosh, Unix, Windows.

6

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

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

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

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

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

+0

Проблема я вижу в том, что это скорее мера того, насколько много процессорного времени, который, хотя и может быть полезно, я не думаю, что он поможет в решении этой проблемы, потому что мне нужно знать, что прямо сейчас appX использует 10% от общей емкости процессора. – UnkwnTech 2008-11-09 18:48:41

+0

«Прямо сейчас», каждый процесс использует 100% для одной процессорной системы - в любой момент времени работает только один процесс, и он запрашивает потребление ресурсов.Сделайте снимок rusage каждую секунду, а затем вычислите, сколько CPU вы использовали за последнюю секунду. – 2008-11-09 18:55:12

0

Используйте time.clock(), чтобы получить процессорное время. Чтобы получить процентное соотношение использования ЦП, прошло время CPU/истекшее время

Например, если время CPU истекло, а время, прошедшее с момента истечения, равно 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 
12

С помощью psutil:

>>> import psutil 
>>> p = psutil.Process() 
>>> p.cpu_times() 
cputimes(user=0.06, system=0.03) 
>>> p.cpu_percent(interval=1) 
0.0 
>>> 

 Смежные вопросы

  • Нет связанных вопросов^_^