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
Hacker-News-Kommentare
Positive Reaktion darauf, dass Cloudflare dem Ausführen von Python am Edge über WebAssembly mehr Aufmerksamkeit schenkt.
Die Ansicht, dass Cloudflare zwar hervorragende Funktionen für Hosting und Datenbanken bietet, sich aber als Entwicklerplattform nicht besonders erfolgreich vermarktet hat.
Positive Einschätzung auf Grundlage von Erfahrungen mit JS Workers über Cloudflare: einfach zu nutzen und sehr schnell.
Die Meinung, dass ein Leistungsvergleich mit JS Workers hilfreich wäre.
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
lzmabeabsichtigt war oder einfach nur Zufall.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.
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.
Die Meinung, dass die Beschränkung auf Pyodide-Pakete erhebliche Auswirkungen auf Builds haben könnte, die nicht trivial sind.