2008-11-09 68 views
14

¿Puedo ver la cantidad de uso del procesador (% del máximo) que utiliza la aplicación actual, python?Uso de la CPU por proceso en Python

Escenario: Mi host me permitirá ejecutar mi aplicación siempre que no consuma más del X% de la potencia de la CPU, por lo que me gustaría 'vigilar' y reducir la velocidad. Entonces, ¿cómo puedo saber cuánto CPU está usando la aplicación?

La plataforma de destino es * nix, sin embargo, me gustaría hacerlo también en un host Win.

Respuesta

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. 

Desde el (2,5) Manual:

veces()

devolver un 5-tupla de números de punto flotante que indican acumulada (procesador u otro) veces, en segundos. Los elementos son: tiempo de usuario, hora del sistema, hora del usuario de los niños, hora del sistema de los niños y tiempo real transcurrido desde un punto fijo en el pasado, en ese orden. Consulte la página del manual de Unix veces (2) o la documentación correspondiente de la API de Windows Platform. Disponibilidad: Macintosh, Unix, Windows.

6

El módulo resource proporciona getrusage que le puede dar la información que necesita, al menos para plataformas tipo Unix.

Tenga en cuenta que el uso de CPU como porcentaje siempre se mide en un intervalo de tiempo. Básicamente, es la cantidad de tiempo que su programa realiza haciendo algo dividido por el intervalo de tiempo.

Por ejemplo, si su aplicación tarda 2 segundos de tiempo de CPU durante un período de 5 segundos, puede decirse que está usando el 40% de la CPU.

Tenga en cuenta que este cálculo, tan simple como parece, puede ser complicado cuando se utiliza un sistema multiprocesador. Si su aplicación usa 7 segundos de tiempo de CPU en 5 segundos de tiempo de reloj de pared en un sistema de dos procesadores, ¿dice usted que usa 140% o 70% de CPU?

Actualización: como gimel menciona, la función os.times también proporciona esta información de forma independiente de la plataforma. Las notas de cálculo anteriores aún se aplican, por supuesto.

+0

El problema que veo con esto es que esto es más de una medida de la cantidad de tiempo de CPU, que si bien puede ser útil, no creo que vaya a ayudar con este problema, porque necesito saber que en este momento, appX está usando el 10% de la capacidad total de la CPU. – UnkwnTech

+0

"Ahora mismo", cada proceso usa el 100% en un solo sistema de procesador: solo hay un proceso en ejecución en cualquier momento, y es el que solicita su consumo de recursos.Tome una instantánea de la velocidad cada segundo y luego calcule la cantidad de CPU que ha utilizado en el último segundo. –

0

Usa time.clock() para obtener el tiempo de CPU. Para obtener el porcentaje de uso de la CPU, transcurra el tiempo de la CPU/tiempo transcurrido

Por ejemplo, si el tiempo de CPU transcurrido es 0.2 y el tiempo transcurrido es 1, el uso de la CPU es del 20%.

Nota: Debe dividirse por la cantidad de procesadores que tiene. Si usted tiene 2 es decir, un doble núcleo:

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 
+4

, pero preste atención a los fans de MS, time.clock() es la hora del reloj de pared si está usando Windows. vea los documentos de Python aquí: http://docs.python.org/library/time.html#time.clock – amwinter

12

Mediante el uso de psutil:

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