3 puntos por GN⁺ 2024-04-03 | 1 comentarios | Compartir por WhatsApp

Integración de Python en Cloudflare Workers: uso de Pyodide y WebAssembly

  • Ahora se puede usar Python en Cloudflare Workers.
  • A diferencia del soporte anterior para lenguajes distintos de JavaScript, la implementación de Python está integrada directamente en el runtime de workerd.
  • Se admiten todos los bindings, como Vectorize, Workers AI, R2 y Durable Objects.
  • Se pueden importar algunos de los paquetes populares de Python, como FastAPI, Langchain y Numpy.
  • No se requiere una etapa de build separada ni una toolchain externa.

Más que compilar a WebAssembly

  • Cloudflare Workers es compatible con WebAssembly desde 2018.
  • No basta con compilar un lenguaje a WebAssembly o JavaScript.
  • También hay que dar soporte al ecosistema de paquetes con el que los desarrolladores ya están familiarizados.

Ciclo de vida de un Python Worker

  • Pyodide está integrado en workerd, lo que permite escribir código en Python.
  • Si se especifica un archivo .py mediante el archivo Wrangler.toml y se ejecuta npx wrangler@latest dev, el runtime inyecta Pyodide automáticamente.

Intérprete de Python integrado en el runtime de Workers

  • CPython es la implementación de referencia de Python, y Pyodide es un port de CPython a WebAssembly.
  • Pyodide proporciona la mayor parte de la biblioteca estándar de Python y ofrece una FFI que permite llamar directamente a la API de JavaScript.

La magia de Pyodide y la interfaz de funciones externas (FFI)

  • La FFI de Pyodide permite acceder a funcionalidades de JavaScript desde Python.
  • Gracias a esto, se pueden usar directamente paquetes como FastAPI y Langchain.

Por qué el enlazado dinámico es esencial y el enlazado estático no basta

  • Muchos paquetes de Python usan C FFI para importar bibliotecas nativas.
  • El enlazado dinámico permite que Pyodide sea compatible con muchos paquetes de Python que dependen de bibliotecas nativas.

Soporte para bibliotecas de servidor y cliente

  • Python cuenta con bibliotecas populares de cliente HTTP como httpx, urllib3 y requests, pero en Pyodide no funcionan de forma predeterminada.
  • Las bibliotecas cliente asíncronas pueden realizar solicitudes usando la Fetch API.

Importación de paquetes de Python

  • Python Workers admite un subconjunto de los paquetes de Python que ofrece directamente Pyodide.
  • Basta con agregar los paquetes al archivo requirements.txt.

Reducir el tiempo de arranque en frío con snapshots de memoria

  • Durante el proceso de inyectar Pyodide en el Worker y subirlo a Cloudflare, se crean snapshots de memoria para reducir el tiempo de arranque en frío.

Preparado para el futuro con versiones de Pyodide y fechas de compatibilidad

  • Se pueden usar fechas de compatibilidad y flags de compatibilidad para optar explícitamente por nuevos comportamientos y cambios que potencialmente no sean retrocompatibles.

Cómo funcionan los bindings en Python Workers

  • Pyodide proporciona una FFI hacia JavaScript, lo que permite usar directamente objetos, métodos y funciones de JavaScript desde Python.

Primeros pasos con Python Workers

  • El soporte real para un nuevo lenguaje de programación requiere una gran inversión que va mucho más allá de un simple "hello world".
  • Python es el lenguaje de programación más popular después de JavaScript, y Cloudflare sigue trabajando para ampliar el soporte de paquetes de Python y mejorar el rendimiento.

Opinión de GN⁺

  • El soporte de Cloudflare para Python Workers es un avance importante para ampliar el uso de Python en arquitecturas serverless. Esto brinda más flexibilidad y opciones a los desarrolladores de Python, y abre la posibilidad de crear aplicaciones basadas en la nube sin depender de JavaScript.
  • La integración de Python en WebAssembly a través de Pyodide plantea nuevas posibilidades para ejecutar código Python en navegadores y entornos serverless. Esto puede tener un gran impacto en el ecosistema de Python, especialmente al impulsar su uso en áreas como ciencia de datos y machine learning, donde JavaScript no domina.
  • Las tecnologías de enlazado dinámico y snapshots de memoria ofrecen una forma de reducir el tiempo de carga inicial y compartir recursos de manera eficiente. Esto representa una mejora de rendimiento importante, especialmente en sistemas distribuidos a gran escala.
  • La gestión de versiones mediante fechas y flags de compatibilidad ofrece una forma flexible de incorporar nuevas funciones y actualizaciones sin comprometer la estabilidad del código existente. Esto es un factor importante para las empresas que operan servicios a largo plazo.
  • A medida que Cloudflare amplía el soporte para Python Workers, los desarrolladores de Python tendrán más opciones al integrar servicios en la nube existentes o al crear nuevos servicios. Esto demuestra que Python puede desempeñar un papel importante en el ámbito del cómputo serverless.

1 comentarios

 
GN⁺ 2024-04-03
Comentarios de Hacker News
  • Reacción positiva: da gusto ver que Cloudflare está poniendo más atención en ejecutar Python en el Edge mediante WebAssembly.

    • Intentan compilar Python a WebAssembly usando Pyodide y empaquetarlo en Workerd para acelerar el tiempo de arranque usando snapshots de V8.
    • El tiempo de arranque en frío (cold start) de Python en Cloudflare Workers es, en el mejor de los casos, de alrededor de 1 segundo.
    • Este anuncio permite medir el interés por ejecutar Python en el Edge, pero tiene algunas desventajas:
      • Está limitado a una sola versión de Python/Pyodide.
      • La resolución de paquetes depende de workerd y es complicada.
      • Depende estructuralmente del mundo de JS/V8, lo que podría ser un reto para reducir los tiempos de arranque en frío.
    • A pesar de estas desventajas, se agradece este tipo de intentos y hay expectativa por las aplicaciones geniales que podrían surgir de aquí.
  • Opinión de que Cloudflare ofrece funciones excelentes para hosting y bases de datos, pero no ha tenido mucho éxito al promocionarse como plataforma para desarrolladores.

    • Hay una pregunta sobre si Cloudflare ofrece un servicio de hosting de contenedores agnóstico al lenguaje, como Google Cloud Run.
  • Evaluación positiva de alguien que ya ha usado JS workers a través de Cloudflare: son fáciles de usar y muy rápidos.

    • Le gustaría portar su app de Django usando la base de datos D1 de Cloudflare.
  • Comentario de que sería útil una comparación de rendimiento con JS worker.

    • Quieren conocer los trade-offs aproximados, con la preocupación de que podría ser más lento por pasar por varias capas.
  • Opinión de que, con Pyodide recibiendo soporte serio, aparece la esperanza de que Python pueda convertirse en una alternativa real a JavaScript en el frontend.

  • Hay una pregunta sobre si el demo con lzma fue intencional o simplemente una coincidencia.

    • Está relacionado con noticias tecnológicas recientes.
  • Opinión de que esto sería un cambio de juego para ejecutar trabajo relacionado con IA en Cloudflare, algo que llevaban mucho tiempo esperando.

  • Opinión de que Cloudflare debería implementar workers que no se limiten a JS workers y que traten a WASM como ciudadano de primera clase.

    • Actualmente el código WASM se ejecuta dentro del contexto de JS, pero se prevé que en el futuro se despliegue directamente a un runtime de WASM sin pasar por contenedores.
  • Han obtenido buenos resultados usando CF Pages para crear sitios estáticos y les atrae la propuesta open source de LLM-as-a-service de Cloudflare.

    • Mencionan que la falta de soporte para Python ha sido el principal obstáculo para construir más cosas en Cloudflare, y quieren probar esta actualización.
  • Opinión de que se preguntan cómo afectará la limitación de usar solo paquetes de Pyodide a builds que no sean triviales.

    • Piensan en los casos con mucho código Python no puro que habría que reconstruir manualmente, y esperan que la adopción por parte de Cloudflare ayude a incluir más paquetes.