A veces el rendimiento de un programa Python se convierte en un elemento muy importante, y pueden existir pequeñas partes del código que influyan claramente en el tiempo y en el uso de memoria. Lamentablemente, nuevos usuarios de Python pueden obtener malos resultados en rendimiento sin conocer la causa, y pensar que deben de reimplementar todo el sistema a otro lenguaje, cuando no es el caso. En este taller veremos cómo podemos determinar el código Python que supone el mayor consumo de recursos, y veremos con algunos ejemplos cómo podemos optimizar las partes crÃticas usando distintas técnicas y librerÃas.
A veces el rendimiento de un programa se convierte en un elemento muy importante, que es necesario medir y, en algunos casos, mejorar. Este hecho es especialmente relevante en lenguajes como Python, en donde el rendimiento puede ser muy variable. Lamentablemente, nuevos usuarios de Python pueden obtener malos resultados en rendimiento sin conocer la causa, y pensar que deben de reimplementar todo el sistema a otro lenguaje, cuando no es el caso.
En este taller veremos cómo podemos determinar el código que supone el mayor consumo de recursos (usando un profile). También veremos cómo podemos optimizar las partes crÃticas usando distintas técnicas. Se espera que tras el taller los asistentes sepan a identificar los cuellos de botella de sus propios programas/librerÃas, y conozcan distintas opciones para poder optimizarlos.
El taller consta de de un enfoque práctico, en el que se verán el uso de las librerÃas y técnicas sobre algunos ejemplos prácticos.
En particular se verá:
- Hacer un profile de un programa para detectar cuellos de botella.
- Hacer un profile desde un notebook.
Una vez identificado el cuello de botella, pasaremos optimizarlo. Para ello, aparte de ciertos consejos de implementación, se mostrará cómo pueden reducirse utilizando algunas librerÃas eficientes y cython para llamar a código en C/C++. Dada la duración no se explicarán en detalle esas librerÃas, pero sà servirá para darlas a conocer a quien no las conozcan y mostrar cómo adaptando un pequeño porcentaje del código se pueden obtener muchos mejores resultados.
Las librerÃas que veremos son:
- LibrerÃas cProfile de la librerÃa estándar.
- pprofile, mejor rendimiento.
- scalene, una librerÃa de profile moderna y con muchas caracterÃsticas.
- Aplicación de scipy y/o numpy para optimizar código.
- Introducir numba y PyPy.
- cython para optimizar partes crÃticas.