3 pontos por GN⁺ 2024-04-03 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2024-04-03
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.

    • Eles usam Pyodide para compilar Python para WebAssembly e empacotá-lo com o Workerd, tentando acelerar o tempo de inicialização com snapshots do V8.
    • O tempo de cold start do Python no Cloudflare Workers é de cerca de 1 segundo, no melhor cenário.
    • Este anúncio permite medir o interesse em executar Python na Edge, mas há algumas desvantagens:
      • Fica limitado a apenas uma versão de Python/Pyodide.
      • A resolução de pacotes depende do workerd e é complicada.
      • Há uma dependência estrutural do ecossistema JS/V8, o que pode ser um desafio para reduzir o tempo de cold start.
    • Apesar dessas desvantagens, a iniciativa é bem-vinda, e há expectativa pelos aplicativos interessantes que podem surgir disso.
  • 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.

    • Há uma pergunta sobre se a Cloudflare oferece um serviço de hospedagem de containers agnóstico à linguagem, como o Google Cloud Run.
  • Avaliação positiva de quem já usou JS workers pela Cloudflare, dizendo que são fáceis de usar e muito rápidos.

    • A pessoa gostaria de portar seu app Django usando o banco de dados D1 da Cloudflare.
  • Comentário de que seria útil uma comparação de desempenho com JS workers.

    • Há preocupação de que possa ser mais lento por passar por várias camadas, e a pessoa quer ter uma noção aproximada dos trade-offs.
  • 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 lzma na demo ser intencional ou apenas coincidência.

    • Isso está relacionado a notícias técnicas recentes.
  • 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.

    • Hoje o código WASM roda dentro do contexto de JS, mas a expectativa é que no futuro ele seja implantado diretamente em um runtime WASM, sem passar por containers.
  • 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.

    • A falta de suporte a Python é mencionada como o principal motivo para não construir mais coisas na Cloudflare, e a pessoa quer testar esta atualização.
  • Comentário de curiosidade sobre como a limitação de usar apenas pacotes do Pyodide afetará builds não triviais.

    • A pessoa pensa em casos com muito código que não é Python puro e que precisaria ser recompilado manualmente, e espera que a adoção pela Cloudflare ajude a incluir mais pacotes.