Integrando Python ao Cloudflare Workers: usando Pyodide e WebAssembly
- Agora é possível usar Python no Cloudflare Workers.
- Diferentemente do suporte anterior a linguagens além de JavaScript, a implementação de Python foi integrada diretamente ao runtime
workerd.
- Todos os bindings, como Vectorize, Workers AI, R2 e Durable Objects, são compatíveis.
- É possível importar parte de pacotes Python populares, como FastAPI, Langchain e Numpy.
- Não é necessária nenhuma etapa de build separada nem toolchain externa.
Mais do que compilar para WebAssembly
- O Cloudflare Workers oferece suporte a WebAssembly desde 2018.
- Apenas compilar uma linguagem para WebAssembly ou JavaScript não é suficiente.
- É preciso oferecer suporte ao ecossistema de pacotes com o qual os desenvolvedores já estão familiarizados.
Ciclo de vida de um Python Worker
- O Pyodide vem embutido no
workerd, permitindo escrever código em Python.
- Basta indicar o arquivo
.py no arquivo Wrangler.toml e executar npx wrangler@latest dev, que o runtime injeta o Pyodide automaticamente.
Interpretador Python embutido no runtime Workers
- O CPython é a implementação de referência do Python, e o Pyodide é uma adaptação do CPython para WebAssembly.
- O Pyodide fornece a maior parte da biblioteca padrão do Python e oferece uma FFI que permite chamar APIs JavaScript diretamente.
A mágica do Pyodide e da interface de funções externas (FFI)
- A FFI do Pyodide permite que o Python acesse recursos do JavaScript.
- Com isso, é possível usar diretamente pacotes como FastAPI e Langchain.
Por que o linking dinâmico é essencial, e o linking estático não basta
- Muitos pacotes Python usam C FFI para importar bibliotecas nativas.
- Com linking dinâmico, o Pyodide pode oferecer suporte a muitos pacotes Python que dependem de bibliotecas nativas.
Suporte a bibliotecas de servidor e cliente
- O Python tem bibliotecas HTTP cliente populares como httpx, urllib3 e requests, mas elas não funcionam por padrão no Pyodide.
- Bibliotecas cliente assíncronas podem fazer requisições usando a Fetch API.
Importação de pacotes Python
- Python Workers oferece suporte a um subconjunto dos pacotes Python fornecidos diretamente pelo Pyodide.
- Basta adicionar os pacotes ao arquivo
requirements.txt.
Redução do cold start com snapshots de memória
- No processo de injetar o Pyodide no Worker e fazer upload para a Cloudflare, são criados snapshots de memória para reduzir o tempo de cold start.
Preparado para o futuro com versões do Pyodide e datas de compatibilidade
- Datas de compatibilidade e flags de compatibilidade permitem optar explicitamente por novos comportamentos e por mudanças potencialmente incompatíveis com versões anteriores.
Como os bindings funcionam em Python Workers
- O Pyodide fornece uma FFI para JavaScript, permitindo usar diretamente em Python objetos, métodos e funções JavaScript.
Primeiros passos com Python Workers
- Dar suporte real a uma nova linguagem de programação exige um grande investimento que vai além do "hello world".
- Python é a linguagem de programação mais popular depois de JavaScript, e a Cloudflare continua trabalhando para ampliar o suporte a pacotes Python e melhorar o desempenho.
Opinião do GN⁺
- O suporte a Python Workers da Cloudflare é um avanço importante para expandir o uso de Python em arquiteturas serverless. Isso oferece mais flexibilidade e poder de escolha para desenvolvedores Python, além de abrir a possibilidade de criar aplicações em nuvem sem depender de JavaScript.
- A integração de Python ao WebAssembly por meio do Pyodide apresenta novas possibilidades para executar código Python em navegadores e ambientes serverless. Isso pode ter grande impacto no ecossistema Python, especialmente em áreas como ciência de dados e machine learning, onde o JavaScript não é dominante.
- As tecnologias de linking dinâmico e snapshots de memória reduzem o tempo de carregamento inicial e oferecem uma forma de compartilhar recursos com eficiência. Isso representa uma melhoria de desempenho importante, especialmente em sistemas distribuídos de grande escala.
- O gerenciamento de versões por meio de datas e flags de compatibilidade oferece uma forma flexível de adotar novos recursos e atualizações sem comprometer a estabilidade do código existente. Esse é um fator importante para empresas que operam serviços no longo prazo.
- À medida que a Cloudflare amplia o suporte a Python Workers, desenvolvedores Python passam a ter mais opções tanto para integrar com serviços de nuvem existentes quanto para desenvolver novos serviços. Isso mostra que o Python pode ter um papel importante na computação serverless.
1 comentários
Comentários do Hacker News
Reação positiva, dizendo que é bom ver a Cloudflare dedicando mais atenção a executar Python na Edge por meio de WebAssembly.
Opinião de que a Cloudflare oferece ótimos recursos para hospedagem e banco de dados, mas não teve muito sucesso em se vender como plataforma para desenvolvedores.
Avaliação positiva de quem já usou JS workers pela Cloudflare, dizendo que são fáceis de usar e muito rápidos.
Comentário de que seria útil uma comparação de desempenho com JS workers.
Opinião de que, com o Pyodide recebendo suporte sério, surge esperança de que Python possa se tornar uma alternativa real ao JavaScript no frontend.
Há uma pergunta sobre o uso de
lzmana demo ser intencional ou apenas coincidência.Opinião de que isso é um divisor de águas para executar trabalhos relacionados a IA na Cloudflare, algo aguardado há muito tempo.
Há o desejo de que a Cloudflare implemente workers que não fiquem limitados a JS workers e tratem WASM como cidadão de primeira classe.
Relato de bons resultados ao criar sites estáticos com CF Pages, além de encantamento com a proposta open source de LLM-as-a-service da Cloudflare.
Comentário de curiosidade sobre como a limitação de usar apenas pacotes do Pyodide afetará builds não triviais.