PyConES 2022

¿Qué está haciendo ahora mi programa? Analizando y mejorando el rendimiento de programas en Python
30/09/2022 , Katherine Johnson (Teoría 7)
Idioma: Español

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.


Nivel de la propuesta:

Principiante

Temática:

Core

Soy un verdadero fan del software libre, usuario de Linux y Emacs (y Vim). He usado Python más de diez años, y tengo experiencia en ello, lo he usado tanto en investigación como en utilidades varias (tengo también varios paquetes en PyPy).