miércoles, 17 de abril de 2013

The Python Profilers


Hace muy poco tiempo me encontré con cProfile de python, es una herramienta para hacer profiling. Pero que es Profile? Un profile es un conjunto de estadísticas que nos indican cuanto demora un método o proceso y como se esta ejecutando. El objetivo es saber porque tarda mi código lo que tarda, para así poder mejorarlo y mejorar la performans del programa.

Las librerías estándares de Python proveen 3 formas de generar profiles:

  • cProfile: es el recomendado por la mayoría de los programadores; es una extensión de C y provee un overhead razonable.
  • Profile: esta totalmente hecho en python y tiene mayor overhead que cProfile
  • hotshot: es una extensión de C experimental, con el objetivo de minimizar el overhead, esta herramienta no tiene mantenimiento y esta pensado eliminarla en nuevas versiones.
En fin el ganador es cProfile, pero como lo utilizamos? Así:


import cProfile
import re
cProfile.run('re.compile("foo|bar")')

Esto nos dará como resultado la siguiente tabla:


197 function calls (192 primitive calls) in 0.002 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.000    0.000    0.001    0.001 <string>:1(<module>)
     1    0.000    0.000    0.001    0.001 re.py:212(compile)
     1    0.000    0.000    0.001    0.001 re.py:268(_compile)
     1    0.000    0.000    0.000    0.000 sre_compile.py:172(_compile_charset)
     1    0.000    0.000    0.000    0.000 sre_compile.py:201(_optimize_charset)
     4    0.000    0.000    0.000    0.000 sre_compile.py:25(_identityfunction)
   3/1    0.000    0.000    0.000    0.000 sre_compile.py:33(_compile)

En el cual podemos ver el método que más se corre y el método que más tiempo ocupa. Simple todos los datos que necesito.

La idea del post no era hacer una guía exhaustiva de cProfile pero si mostrar lo fácil del uso y practico.

Dejo link:
http://docs.python.org/2/library/profile.html