sábado, 11 de octubre de 2008

Análisis de Performance de un Script Python

Hola!

De toda la pila de mails que recibo, leo y analizo (cuando puedo) de PyAr, me interesó mucho uno de este hilo, referido al lenguaje DOT y su utilización práctica en el desarrollo en general. Básicamente, se comentó lo útil que es graficar la salida de la ejecución de un profiler, con este generador de lenguaje DOT basado en el log de cualquiera de los 3 módulos de profiling de Python [1][2]: Gprof2Dot.

Brevemente, lo probé con un script que tengo para armar un archivo de texto con cierto formato, resultado de un query a una base de datos. Ejecuté esto, tal como dice el sitio de la herramienta:

$ python -m cProfile -o output.pstats ./mkmenu.py
$ gprof2dot.py -f pstats output.pstats | dot -Tpng -o output.png
Y obtuve este precioso gráfico:
El cual demuestra que una vieja regla sigue teniendo vigencia: "no importa lo que hagas en tu programa, el cuello de botella va a estar en la base de datos". :-)

Más allá de eso, me encantó esta manera gráfica y elegante de buscar "hot spots" donde uno puede ir y optimizar el código.

Saludos
Marcelo

[1]: Python tiene 3 módulos para hacer profiling, 2 relacionados (profile y cProfile) y uno aparte (hotshot). Según el caso, uno es más adecuado que otro. Hotshot ya está en desuso y en próximas versiones se lo podría quitar de la librería estándar.
[2] Gprof2Dot también sirve para graficar el log de un log oprofile (es un profiler genérico para Linux).

No hay comentarios.: