3 points par GN⁺ 2024-04-03 | 1 commentaires | Partager sur WhatsApp

Intégrer Python à Cloudflare Workers : avec Pyodide et WebAssembly

  • Python peut désormais être utilisé dans Cloudflare Workers.
  • Contrairement à la prise en charge précédente de langages autres que JavaScript, l’implémentation Python est directement intégrée au runtime workerd.
  • Tous les bindings comme Vectorize, Workers AI, R2 et Durable Objects sont pris en charge.
  • Il est possible d’importer une partie de packages Python populaires comme FastAPI, Langchain et Numpy.
  • Aucune étape de build séparée ni toolchain externe n’est nécessaire.

Au-delà de la simple compilation vers WebAssembly

  • Cloudflare Workers prend en charge WebAssembly depuis 2018.
  • Il ne suffit pas de compiler un langage vers WebAssembly ou JavaScript.
  • Il faut aussi prendre en charge l’écosystème de packages auquel les développeurs sont habitués.

Cycle de vie d’un Worker Python

  • Pyodide est intégré à workerd, ce qui permet d’écrire du code Python.
  • Il suffit d’indiquer un fichier .py via le fichier Wrangler.toml puis d’exécuter npx wrangler@latest dev pour que le runtime injecte automatiquement Pyodide.

Un interpréteur Python intégré au runtime Workers

  • CPython est l’implémentation de référence de Python, et Pyodide est un portage de CPython vers WebAssembly.
  • Pyodide fournit l’essentiel de la bibliothèque standard Python ainsi qu’une FFI permettant d’appeler directement des API JavaScript.

La magie de Pyodide et de l’interface de fonctions externes (FFI)

  • La FFI de Pyodide permet au code Python d’accéder aux fonctionnalités JavaScript.
  • Cela permet d’utiliser directement des packages comme FastAPI et Langchain.

Pourquoi l’édition de liens dynamique est indispensable, et pourquoi l’édition statique ne suffit pas

  • De nombreux packages Python utilisent une FFI C pour importer des bibliothèques natives.
  • Grâce à l’édition de liens dynamique, Pyodide peut prendre en charge de nombreux packages Python dépendant de bibliothèques natives.

Prise en charge des bibliothèques serveur et client

  • Python dispose de bibliothèques clientes HTTP populaires comme httpx, urllib3 et requests, mais elles ne fonctionnent pas nativement dans Pyodide.
  • Les bibliothèques clientes asynchrones peuvent effectuer des requêtes via la Fetch API.

Importer des packages Python

  • Les Python Workers prennent en charge un sous-ensemble des packages Python fournis directement par Pyodide.
  • Il suffit d’ajouter les packages dans le fichier requirements.txt.

Réduire le temps de cold start grâce aux instantanés mémoire

  • Lors de l’injection de Pyodide dans le Worker et de son upload vers Cloudflare, un instantané mémoire est créé afin de réduire le temps de cold start.

Pérenniser la compatibilité avec les versions de Pyodide et les dates de compatibilité

  • Les dates de compatibilité et les flags de compatibilité permettent d’opter explicitement pour de nouveaux comportements et des changements potentiellement non rétrocompatibles.

Fonctionnement des bindings dans les Python Workers

  • Pyodide fournit une FFI vers JavaScript, ce qui permet d’utiliser directement depuis Python des objets, méthodes et fonctions JavaScript.

Bien démarrer avec Python Workers

  • Une véritable prise en charge d’un nouveau langage de programmation exige un investissement important au-delà du simple "hello world".
  • Python est le langage de programmation le plus populaire après JavaScript, et Cloudflare continue d’élargir la prise en charge des packages Python et d’améliorer les performances.

L’avis de GN⁺

  • La prise en charge de Python Workers par Cloudflare constitue une avancée importante pour étendre l’usage de Python dans les architectures serverless. Elle offre davantage de flexibilité et de choix aux développeurs Python, tout en ouvrant la possibilité de créer des applications cloud sans dépendre de JavaScript.
  • L’intégration de Python à WebAssembly via Pyodide ouvre de nouvelles possibilités pour exécuter du code Python dans le navigateur comme dans les environnements serverless. Cela peut avoir un impact majeur sur l’écosystème Python, en particulier dans des domaines comme la data science et le machine learning où JavaScript n’est pas dominant.
  • Les technologies d’édition de liens dynamique et d’instantanés mémoire permettent de réduire le temps de chargement initial et de partager plus efficacement les ressources. Cela représente un gain de performance important, en particulier dans les systèmes distribués à grande échelle.
  • La gestion des versions via les dates de compatibilité et les flags fournit une manière souple d’adopter de nouvelles fonctionnalités et mises à jour tout en préservant la stabilité du code existant. C’est un élément important pour les entreprises qui exploitent des services sur le long terme.
  • À mesure que Cloudflare étend la prise en charge de Python Workers, les développeurs Python disposent de davantage d’options pour intégrer des services cloud existants ou en créer de nouveaux. Cela montre que Python peut jouer un rôle important dans le domaine du serverless computing.

1 commentaires

 
GN⁺ 2024-04-03
Commentaires sur Hacker News
  • Réaction positive : heureux de voir Cloudflare accorder davantage d’attention à l’exécution de Python à l’edge via WebAssembly.

    • Tentative d’utiliser Pyodide pour compiler Python vers WebAssembly, puis l’intégrer à Workerd afin d’accélérer le temps de démarrage à l’aide de snapshots V8.
    • Le temps de démarrage à froid (cold start) de Python sur Cloudflare Workers est d’environ 1 seconde dans le meilleur des cas.
    • Cette annonce permet de mesurer l’intérêt pour l’exécution de Python à l’edge, mais présente quelques inconvénients :
      • Limité à une seule version de Python/Pyodide.
      • La résolution des paquets dépend de workerd et reste délicate.
      • Dépendance structurelle au monde JS/V8, ce qui peut compliquer la réduction du temps de démarrage à froid.
    • Malgré ces limites, cette tentative est saluée, avec l’espoir de voir émerger de superbes applications grâce à elle.
  • Avis selon lequel Cloudflare propose d’excellentes fonctionnalités pour l’hébergement et les bases de données, mais n’a pas vraiment réussi à se positionner en tant que plateforme pour développeurs.

    • Question sur l’existence, chez Cloudflare, d’un service d’hébergement de conteneurs indépendant du langage comparable à Google Cloud Run.
  • Retour d’expérience positif sur l’usage de JS workers via Cloudflare : c’est simple à utiliser et très rapide.

    • Souhait de porter une application Django en utilisant la base de données D1 de Cloudflare.
  • Avis qu’une comparaison des performances avec les JS workers serait utile.

    • Volonté de connaître les grands compromis, avec la crainte que cela soit plus lent en raison des multiples couches impliquées.
  • Opinion selon laquelle, avec le sérieux du support apporté à Pyodide, on peut espérer que Python devienne une véritable alternative à JavaScript côté frontend.

  • Question sur le fait de savoir si la démo utilisant lzma était intentionnelle ou simplement fortuite.

    • Cela fait écho à l’actualité technologique récente.
  • Avis qualifiant cela de game changer pour exécuter des tâches liées à l’IA sur Cloudflare, chose attendue depuis longtemps.

  • Souhait que Cloudflare implémente des workers qui ne soient pas limités aux JS workers et traitent WASM comme un citoyen de première classe.

    • Aujourd’hui, le code WASM s’exécute dans un contexte JS, mais à l’avenir il pourrait être déployé directement vers un runtime WASM sans passer par des conteneurs.
  • Bon retour sur l’utilisation de CF Pages pour créer des sites statiques, et intérêt marqué pour l’offre open source de Cloudflare de type LLM-as-a-service.

    • Il est mentionné que l’absence de support Python était le principal obstacle à la construction de davantage de projets sur Cloudflare, et que cette mise à jour donne envie d’essayer.
  • Avis s’interrogeant sur l’impact de la limitation aux seuls paquets Pyodide pour des builds non triviaux.

    • En pensant aux nombreux morceaux de code Python non purs qui devraient être reconstruits manuellement, avec l’espoir que l’adoption par Cloudflare aide à inclure davantage de paquets.