La semana pasada comencé esta serie de dos partes del blog sobre el aumento de la velocidad de Python a través de Cython y PyPy. Aunque ya discutimos los efectos de Cython, quería continuar la discusión con una mirada a PyPy y luego un contraste de ambos PyPy y Cython.
¿Qué es PyPy?
PyPy es un intérprete alternativo de Python y un compilador justo a tiempo (JIT) que es altamente compatible (sujeto a algunas advertencias) con el intérprete CPython. Está diseñado para la velocidad y la eficiencia y utiliza un compilador JIT de rastreo para optimizar las partes del programa que se ejecutan con frecuencia en tiempo de ejecución, aumentando así la velocidad de ejecución.
PyPy ejecuta programas Python normales; en general, no es necesario realizar modificaciones en el código Python para que pueda ejecutarse en PyPy. Debido a la naturaleza del compilador JIT, necesita tiempo para analizar las partes del programa que se ejecutan con frecuencia, por lo que funciona mejor en programas que se ejecutan durante más de unos pocos segundos.
Tal vez el mayor obstáculo para usar PyPy en un sistema de producción es su falta de soporte para los módulos de extensión de CPython. Según la documentación de PyPy, el soporte de módulos de extensión es experimental y a menudo se ejecuta mucho más lento que en CPython. Esto significa que algunas bibliotecas de terceros que tienen módulos de extensión de C podrían no funcionar en PyPy – la biblioteca de computación científica NumPy es un ejemplo notable. Dicho esto, PyPy es capaz de ejecutar la mayoría de los frameworks y librerías populares de Python, como Django, Flask y SQLAlchemy.
La página de PyPy en Wikipedia y el sitio web de PyPy proporcionan mucha información sobre qué es PyPy y cómo usarlo; este último también tiene una buena sección que muestra una lista de puntos de referencia y sus mejoras de velocidad sobre CPython.
La página de PyPy en Wikipedia y el sitio web de PyPy proporcionan mucha información sobre lo que es PyPy y cómo usarlo; este último también tiene una buena sección que muestra una lista de puntos de referencia y sus mejoras de velocidad sobre CPython.
Cómo funciona Cython frente a CPython
Mi principal objetivo al hacer este ejercicio era entender cómo funcionan las herramientas, y ser capaz de comparar las diferencias en la sintaxis y la estructura del código entre ellas. Con eso en mente, elegí escribir un sencillo programa de integración numérica, que se basa en un ejemplo dado en la documentación de Cython. La fuente completa del proyecto, incluyendo la instalación y las instrucciones de construcción de Cython, se puede encontrar en Bitbucket.