- Ein Compiler, der Python-Programme in WebAssembly umwandelt
- Läuft 3-mal schneller als CPython(WASM), da der Interpreter-Overhead entfällt
- Im Vergleich zu CPython(Native) erreicht er etwa 60 % der Geschwindigkeit
- Es gibt mehrere Möglichkeiten, Python schnell in WebAssembly auszuführen
- Verwendung einer Python-Teilmenge, die zu performantem Code kompiliert werden kann: CPython, RPython(PyPy) und Codon
- Einsatz von JIT innerhalb von Python: PyPy
- Optimierung des generierten Codes mithilfe statischer Analyse: mypy & mypy-c, Nuitka
- Hier fiel die endgültige Wahl auf den Python-Optimierungs-Compiler Nuitka
Nuitka
- Nuitka arbeitet, indem es die Python-Aufrufe eines Programms mithilfe interner CPython-API-Aufrufe in C umwandelt
- Unterstützt die meisten Python-Programme und konvertiert Python-Code in entsprechende CPython-Aufrufe
- Kann auch als Code-Obfuskator dienen (niemand kann das Programm dekompilieren!)
- Nach eingehender Analyse aller Optionen wurde klar, dass der vermutlich schnellste Weg, Python in WebAssembly auszuführen, die Nutzung von Nuitka ist
Python mit Nuitka zu WebAssembly kompilieren
- Nuitka scheint die einfachste Option zu sein, um Python im WebAssembly-Kontext zu beschleunigen, da der Großteil der Arbeit zur Umwandlung von Python-Code in grundlegende CPython-Interpreter-Aufrufe bereits erledigt ist
- Da Nuitka noch nicht mit Python 3.12 funktioniert, musste Python 3.11 für WASI neu kompiliert und das erzeugte
libpython.a-Archiv verwendet werden
- Beim Versuch, die erzeugte Wasm-Datei auszuführen, trat ein weiteres Problem auf, daher wurde ein PR eingereicht, um die Änderungen in Nuitka upstream einzubringen
- Derzeit verwendet py2wasm einen Fork von Nuitka, aber sobald die Änderungen upstream integriert sind, ist geplant, py2wasm zu einer schlanken Schicht über Nuitka zu machen
- Die ursprüngliche Anforderung war, die Python-Ausführung maximal zu beschleunigen, um ein Python-Django-Backend von Google Cloud zu Wasmer Edge zu migrieren
- py2wasm bringt uns einen Schritt näher daran, Python-Backend-Apps mit beeindruckender Performance am Edge auszuführen, und könnte so eine deutlich günstigere Alternative zum Hosting solcher Apps als heutige Cloud-Anbieter ermöglichen
Zukünftige Roadmap
Noch keine Kommentare.