Llegamos a ustedes gracias a:



Noticias

Nuevo perfilador de aplicaciones de Python

Utiliza Rust para lograr velocidad y seguridad

[27/09/2018] Una nueva herramienta de perfilado de muestras para los desarrolladores de Python, Py-Spy, reúne las estadísticas sobre la ejecución de programas Python sin necesidad de instrumentalizar el código, o incluso reiniciar una aplicación en ejecución.

Escrita por el desarrollador Ben Frederickson, Py-Spy se puede instalar mediante el instalador pip de Python, y se ejecuta tanto en Linux como en Windows. Esto hace que sea sencillo configurarla y útil en cualquier entorno donde se ejecuta Python.

La mayoría de los sistemas de perfilado para Python, afirma Frederickson en las notas de su proyecto, requiere de cambios en el código de fuente para instrumentalizar la aplicación. Además de las posibles molestias de modificar la fuente, esto también significa que el código perfilado tiene que ejecutarse en el mismo proceso que la aplicación en sí. "Esto significa que no es generalmente seguro usar a estos perfiladores para depurar los problemas en servicios de producción, ya que generalmente tendrán un impacto notable en el desempeño, escribe.

Un perfil vivo de un script de Python en ejecución. Las estadísticas son muestreadas desde el ejecutable de Python y se pueden clasificar según el tiempo total o el porcentaje de tiempo utilizado.

Py-Spy toma un enfoque diferente. Se ejecuta como un proceso separado, toma el ID de la aplicación de Python para analizarla, y utiliza las API de nivel de kernel en la plataforma donde se ejecuta para leer memoria de la aplicación. Así, afirma Frederickson, es seguro usar Py-Spy en producción.

Los rastros resultantes se pueden dejar en la consola, en donde las funciones más llamadas aparecen en una lista o se pueden visualizar como un flame graph. Py-Spy también proporciona estadísticas de cuánto tiempo gasta un proceso esperando en el Global Interpreter Lock (GIL) del intérprete de Python. El GIL aplica la gestión de memoria thread-safe, pero a costa del desempeño del multiproceso, así Py-Spy puede proporcionar cierta perspectiva sobre cuánto impacto tiene el GIL sobre cualquier aplicación.

Py-Spy usa binarios escritos en Rust para realizar gran parte de su magia. La mayoría de los binarios incorporados dentro de Python se encuentran escritos en C o C++, o en la variante Cython de Python que compila a C nativo. Pero han aparecido varios proyectos para que sea más fácil escribir aplicaciones Rust que tienen interfaz con Python y viceversa, para aprovechar la seguridad de la memoria de Rust y las velocidades del aprendizaje automático.

En estos momentos existe un inconveniente para usar Rust de esta forma: el sistema setuptools de Python aún no ha integrado soporte para crear y empaquetar un binario de Rust. Normalmente, un necesita un compilador de Rust en el sistema donde se instala Py-Spy. Frederickson creó lo que llama "un truco muy espantoso que podría ser útil para otras personas para empaquetar los binarios de Py-Spy en el paquete de instalación pip.

Otra limitación del propio Py-Spy es que no puede reunir información acerca de las extensiones de C para Python en el mismo proceso, sólo del propio intérprete de Python. Sin embargo, Frederickson señala que sería posible hacer esto con trabajo adicional, como usar la biblioteca libunwind.

Serdar Yegulalp, InfoWorld (EE.UU.)