Использование процессора для каждого процесса в Python
-
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