2012-01-21 20 views
10

Puede alguien sugerir cuál sería la mejor práctica o una biblioteca adecuada para determinar:¿Cómo se determina el costo de la CPU y la memoria de una función?

  1. Número de ciclos de CPU utilizados durante la ejecución de una función de Python?
  2. Cantidad de ¿Memoria utilizada por la misma función de Python?

me había basado en guppy y Melíade, pero todavía no puede conseguir granular a nivel de la función? ¿Me estoy perdiendo de algo?

ACTUALIZACIÓN La necesidad de hacer esta pregunta es resolver una situación específica que es, el escenario es que tenemos un conjunto de tareas distribuidas que se ejecutan en los casos de nube, y ahora tenemos que reorganizar la colocación de tareas en los tipos de instancias correctas dentro del clúster, por ejemplo, las tareas funcionales que consumen mucha memoria se colocarían en instancias de memoria más grandes, y así sucesivamente. Cuando me refiero a tareas (apio-tareas), estas no son más que simples funciones para las cuales ahora debemos perfilar su uso de ejecución.

Gracias.

+10

Si necesita preocuparse por estas cosas con tanta precisión, Python no es el idioma para usted. –

+2

"¿Me estoy perdiendo algo?" Sí. Te estás perdiendo el hecho de que Python se basa en una de las muchas implementaciones: CPython, Jython, PyPy, cada una de las cuales es diferente. La mayoría de las implementaciones se basan directa o indirectamente en las bibliotecas C de GNU, que varían de una versión a otra. Va a ser muy, muy difícil medir los ciclos de CPU porque hay tantas capas de software involucradas. ¿Qué estás tratando de aprender? ¿Qué necesita saber? ¿Qué decisión estás tratando de hacer? –

+0

como @ S.Lott dijo: Será difícil determinar los ciclos de la CPU de la función EXACT, ya que incluso si puede medirlo, los resultados no serán precisos. – user779444

Respuesta

7

Es posible que desee ver en una CPU profiler para Python:
http://docs.python.org/library/profile.html
Ejemplo de salida de cProfile.run(command[, filename])

2706 function calls (2004 primitive calls) in 4.504 CPU seconds 

Ordered by: standard name 

ncalls tottime percall cumtime percall filename:lineno(function) 
    2 0.006 0.003 0.953 0.477 pobject.py:75(save_objects) 
    43/3 0.533 0.012 0.749 0.250 pobject.py:99(evaluate) 
... 

Además, memory necesita un generador de perfiles también:
perfiladores de código abierto: PySizer y Heapy

+0

Gracias @Ayoubi por el puntero anterior, seguramente ayuda un poco. Gracias de nuevo. –

+1

@ayoubi: Muestra el tiempo de ejecución, pero ¿qué ocurre con los ciclos de la CPU (utilización de la CPU), la memoria (uso de la memoria)? –

Cuestiones relacionadas