Использование процессора для каждого процесса в Python

StackOverflow https://stackoverflow.com/questions/276281

  •  07-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

Используя псутил:

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

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

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

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

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

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

Использование time.clock() чтобы получить процессорное время.Чтобы получить процент загрузки процессора, укажите затраченное процессорное время / time elapsed

Например, если затраченное процессорное время равно 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top