17 Punkte von xguru 2024-04-23 | Noch keine Kommentare. | Auf WhatsApp teilen
  • 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

  • Künftig soll py2wasm als Wasmer-Paket veröffentlicht werden, sodass es sich einfach mit folgendem Befehl ausführen lässt
    wasmer run py2wasm --dir=. -- myfile.py -o myfile.wasm  
    

Noch keine Kommentare.

Noch keine Kommentare.