Na semana passada comecei esta série de blogs em duas partes sobre como aumentar a velocidade do Python através do Cython e PyPy. Enquanto já discutimos os efeitos do Cython, eu queria continuar a discussão com um olhar sobre PyPy e depois um contraste de ambos PyPy e Cython.
O que é PyPy?
PyPy é um intérprete Python alternativo e compilador just-in-time (JIT) que é altamente compatível (sujeito a algumas advertências) com o intérprete CPython. Ele é projetado para velocidade e eficiência e usa um compilador JIT de rastreamento para otimizar partes frequentemente executadas do programa em tempo de execução, aumentando assim a velocidade de execução.
PyPyPy roda programas Python regulares; em geral, nenhuma modificação precisa ser feita no código Python para permitir que ele rode em PyPy. Devido à natureza do compilador JIT, ele precisa de tempo para analisar partes frequentemente executadas do programa, então ele funciona melhor em programas que rodam por mais de alguns segundos.
Talvez o maior obstáculo ao uso do PyPy em um sistema de produção seja a sua falta de suporte aos módulos de extensão do CPython. De acordo com a documentação do PyPy, o suporte a módulos de extensão é experimental e muitas vezes roda muito mais lentamente do que no CPython. Isto significa que algumas bibliotecas de terceiros que possuem módulos de extensão C podem não funcionar em PyPy – a biblioteca de computação científica NumPy é um exemplo notável. Tendo dito isto, PyPy é capaz de rodar a maioria dos frameworks e bibliotecas Python populares, como Django, Flask, e SQLAlchemy.
A página da Wikipedia PyPy e o site PyPy fornecem muitas informações sobre o que é PyPy e como usá-lo; este último também tem uma boa seção que mostra uma lista de benchmarks e suas melhorias de velocidade sobre o CPython.
A página da Wikipédia PyPy e o website PyPy fornecem muita informação sobre o que é PyPy e como usá-lo; este último também tem uma boa seção que mostra uma lista de benchmarks e suas melhorias de velocidade sobre CPython.
Como funciona Cython vs CPython
O meu objetivo principal ao fazer este exercício foi entender como as ferramentas funcionam, e ser capaz de comparar as diferenças de sintaxe e estrutura de código entre elas. Com isso em mente, eu escolhi escrever um programa simples de integração numérica, que é baseado em um exemplo dado na documentação do Cython. O código fonte completo do projeto, incluindo instruções de instalação e compilação do Cython, pode ser encontrado em Bitbucket.