3 Punkte von GN⁺ 2024-04-03 | 1 Kommentare | Auf WhatsApp teilen

Python in Cloudflare Workers integrieren: mit Pyodide und WebAssembly

  • In Cloudflare Workers kann jetzt Python verwendet werden.
  • Anders als bei der bisherigen Unterstützung anderer Sprachen neben JavaScript ist die Python-Implementierung direkt in die workerd-Laufzeit integriert.
  • Alle Bindings wie Vectorize, Workers AI, R2 und Durable Objects werden unterstützt.
  • Teile beliebter Python-Pakete wie FastAPI, Langchain und Numpy können importiert werden.
  • Es ist weder ein separater Build-Schritt noch eine externe Toolchain erforderlich.

Mehr als nur die Kompilierung nach WebAssembly

  • Cloudflare Workers unterstützt WebAssembly seit 2018.
  • Es reicht nicht aus, eine Sprache einfach nur nach WebAssembly oder JavaScript zu kompilieren.
  • Es muss auch das Paket-Ökosystem unterstützt werden, an das Entwickler gewöhnt sind.

Lebenszyklus eines Python Workers

  • Pyodide ist in workerd eingebettet, sodass Python-Code geschrieben werden kann.
  • Über die Datei wrangler.toml wird eine .py-Datei angegeben; führt man anschließend npx wrangler@latest dev aus, injiziert die Laufzeit Pyodide automatisch.

In die Workers-Laufzeit eingebauter Python-Interpreter

  • CPython ist die Referenzimplementierung von Python, und Pyodide ist eine Portierung von CPython nach WebAssembly.
  • Pyodide stellt den Großteil der Python-Standardbibliothek bereit und bietet eine FFI, über die JavaScript-APIs direkt aufgerufen werden können.

Die Magie von Pyodide und dem Foreign Function Interface (FFI)

  • Die FFI von Pyodide ermöglicht den Zugriff auf JavaScript-Funktionen aus Python.
  • Dadurch können Pakete wie FastAPI und Langchain direkt verwendet werden.

Warum dynamisches Linken unverzichtbar ist und statisches Linken nicht ausreicht

  • Viele Python-Pakete verwenden C FFI, um native Bibliotheken einzubinden.
  • Durch dynamisches Linken kann Pyodide viele Python-Pakete unterstützen, die von nativen Bibliotheken abhängen.

Unterstützung für Server- und Client-Bibliotheken

  • Python bietet viele populäre HTTP-Client-Bibliotheken wie httpx, urllib3 und requests, diese funktionieren in Pyodide jedoch standardmäßig nicht.
  • Asynchrone Client-Bibliotheken können Anfragen über die Fetch API ausführen.

Python-Pakete importieren

  • Python Workers unterstützen eine Teilmenge der Python-Pakete, die direkt von Pyodide bereitgestellt werden.
  • Es reicht aus, Pakete zur Datei requirements.txt hinzuzufügen.

Kaltstartzeiten mit Memory Snapshots verkürzen

  • Beim Injizieren von Pyodide in den Worker und beim Upload zu Cloudflare werden Memory Snapshots erzeugt, um die Kaltstartzeit zu verkürzen.

Zukunftssichere Handhabung von Pyodide-Versionen und Kompatibilitätsdaten

  • Mit Kompatibilitätsdaten und Kompatibilitäts-Flags kann explizit in neues Verhalten und potenziell nicht abwärtskompatible Änderungen optiert werden.

Wie Bindings in Python Workers funktionieren

  • Pyodide stellt eine FFI zu JavaScript bereit, sodass JavaScript-Objekte, -Methoden und -Funktionen direkt aus Python verwendet werden können.

Erste Schritte mit Python Workers

  • Echte Unterstützung für eine neue Programmiersprache erfordert erhebliche Investitionen, die weit über "hello world" hinausgehen.
  • Python ist nach JavaScript die zweitbeliebteste Programmiersprache, und Cloudflare arbeitet kontinuierlich daran, die Unterstützung für Python-Pakete auszubauen und die Performance zu verbessern.

Meinung von GN⁺

  • Die Unterstützung von Cloudflare für Python Workers ist ein wichtiger Fortschritt für den Einsatz von Python in serverlosen Architekturen. Sie bietet Python-Entwicklern mehr Flexibilität und Auswahl und eröffnet die Möglichkeit, Cloud-basierte Anwendungen zu bauen, ohne auf JavaScript angewiesen zu sein.
  • Die WebAssembly-Integration von Python über Pyodide eröffnet neue Möglichkeiten, Python-Code in Browser- und serverlosen Umgebungen auszuführen. Das könnte große Auswirkungen auf das Python-Ökosystem haben und insbesondere in Bereichen wie Data Science und Machine Learning, in denen JavaScript nicht dominiert, die Nutzung von Python fördern.
  • Dynamisches Linken und Memory-Snapshot-Techniken verkürzen die anfängliche Ladezeit und ermöglichen eine effiziente gemeinsame Nutzung von Ressourcen. Das bedeutet insbesondere in großen verteilten Systemen eine wichtige Performance-Verbesserung.
  • Versionsmanagement über Kompatibilitätsdaten und Flags bietet eine flexible Möglichkeit, neue Funktionen und Updates aufzunehmen, ohne die Stabilität bestehenden Codes zu gefährden. Das ist ein wichtiger Faktor für Unternehmen, die Dienste langfristig betreiben.
  • Da Cloudflare die Unterstützung für Python Workers weiter ausbaut, erhalten Python-Entwickler mehr Optionen bei der Integration in bestehende Cloud-Dienste oder bei der Entwicklung neuer Services. Das zeigt, dass Python im Bereich Serverless Computing eine wichtige Rolle spielen kann.

1 Kommentare

 
GN⁺ 2024-04-03
Hacker-News-Kommentare
  • Positive Reaktion darauf, dass Cloudflare dem Ausführen von Python am Edge über WebAssembly mehr Aufmerksamkeit schenkt.

    • Es wird versucht, Python mit Pyodide nach WebAssembly zu kompilieren, in Workerd zu bündeln und die Startzeit mithilfe von V8-Snapshots zu beschleunigen.
    • Die Cold-Start-Zeit von Python in Cloudflare Workers liegt im besten Fall bei etwa 1 Sekunde.
    • Diese Ankündigung macht es möglich, das Interesse an der Ausführung von Python am Edge zu messen, hat aber einige Nachteile:
      • Auf nur eine Python-/Pyodide-Version beschränkt.
      • Die Paketauflösung hängt von workerd ab und ist knifflig.
      • Strukturell von der JS-/V8-Welt abhängig, was es schwierig machen könnte, die Cold-Start-Zeit zu verringern.
    • Trotz dieser Nachteile wird ein solcher Versuch begrüßt, und man freut sich auf die coolen Apps, die dadurch entstehen werden.
  • Die Ansicht, dass Cloudflare zwar hervorragende Funktionen für Hosting und Datenbanken bietet, sich aber als Entwicklerplattform nicht besonders erfolgreich vermarktet hat.

    • Es gibt die Frage, ob Cloudflare einen sprachunabhängigen Container-Hosting-Service wie Google Cloud Run anbietet.
  • Positive Einschätzung auf Grundlage von Erfahrungen mit JS Workers über Cloudflare: einfach zu nutzen und sehr schnell.

    • Man würde gerne die eigene Django-App unter Nutzung von Cloudflares D1-Datenbank portieren.
  • Die Meinung, dass ein Leistungsvergleich mit JS Workers hilfreich wäre.

    • Man möchte die ungefähren Trade-offs kennen, verbunden mit der Sorge, dass es wegen der vielen Schichten langsam sein könnte.
  • Die Ansicht, dass mit der starken Unterstützung für Pyodide Hoffnung besteht, dass Python im Frontend zu einer echten Alternative zu JavaScript werden könnte.

  • Die Frage, ob die Demo mit lzma beabsichtigt war oder einfach nur Zufall.

    • Das steht im Zusammenhang mit aktuellen Tech-Nachrichten.
  • Die Einschätzung, dass dies ein Gamechanger für die Ausführung von KI-bezogenen Aufgaben auf Cloudflare ist und dass man lange darauf gewartet hat.

  • Die Hoffnung, dass Cloudflare Workers implementiert, die nicht auf JS Workers beschränkt sind, sondern WASM als First-Class Citizen behandeln.

    • Derzeit läuft WASM-Code innerhalb eines JS-Kontexts, aber künftig werde er vermutlich direkt in eine WASM-Runtime deployt, ohne den Umweg über Container.
  • Mit CF Pages wurden gute Ergebnisse beim Erstellen statischer Websites erzielt, und es besteht Begeisterung für Cloudflares Open-Source-LLM-as-a-service-Angebot.

    • Es wird erwähnt, dass der Mangel an Python-Unterstützung das Hauptproblem war, warum man nicht mehr auf Cloudflare aufgebaut hat, und man möchte dieses Update ausprobieren.
  • Die Meinung, dass die Beschränkung auf Pyodide-Pakete erhebliche Auswirkungen auf Builds haben könnte, die nicht trivial sind.

    • Es wird an Fälle mit viel nicht reinem Python-Code gedacht, der manuell neu gebaut werden müsste, verbunden mit der Hoffnung, dass Cloudflares Einführung dabei helfen könnte, mehr Pakete einzubinden.