- Compilador que converte programas Python para WebAssembly
- Funciona 3 vezes mais rápido que CPython (WASM) ao eliminar a sobrecarga do interpretador
- Em comparação com CPython (nativo), atinge cerca de 60% da velocidade
- Há várias maneiras de executar Python rapidamente em WebAssembly
- Usar um subconjunto de Python que possa ser compilado em código com bom desempenho: CPython, RPython (PyPy) e Codon
- Usar JIT dentro do Python: PyPy
- Otimizar o código gerado com análise estática: mypy & mypy-c, Nuitka
- Aqui, a decisão final foi usar o compilador otimizador de Python, Nuitka
Nuitka
- O Nuitka funciona convertendo chamadas Python executadas pelo programa em C usando chamadas internas da API do CPython
- Suporta a maioria dos programas Python e converte o código Python nessas chamadas do CPython
- Também pode funcionar como um ofuscador de código (ninguém consegue descompilar o programa!)
- Depois de analisar profundamente todas as opções, ficou claro que a forma mais rápida de executar Python em WebAssembly provavelmente é usando o Nuitka
Compilando Python para WebAssembly com Nuitka
- O Nuitka parece ser a opção mais simples para acelerar Python no contexto de WebAssembly, porque grande parte do trabalho de converter código Python em chamadas do interpretador CPython subjacente já está pronta
- Como o Nuitka ainda não funciona com Python 3.12, foi necessário recompilar o Python 3.11 para WASI e usar o arquivo
libpython.agerado - Ao tentar executar o arquivo Wasm gerado, surgiu outro problema, então foi enviado um PR para incorporar as mudanças ao projeto principal do Nuitka
- No momento, o py2wasm usa um fork do Nuitka, mas o plano é transformar o py2wasm em uma camada fina sobre o Nuitka quando as mudanças forem integradas ao upstream
- O requisito inicial era acelerar ao máximo a execução de Python para migrar um backend Python Django do Google Cloud para o Wasmer Edge
- O py2wasm ajudará a aproximar a execução de apps backend em Python na Edge com desempenho impressionante, oferecendo uma alternativa muito mais barata para hospedar esses apps do que os provedores de nuvem atuais
Roteiro futuro
- No futuro, a ideia é publicar o py2wasm como um pacote do Wasmer para que seja possível executá-lo apenas com o seguinte comando
wasmer run py2wasm --dir=. -- myfile.py -o myfile.wasm
Ainda não há comentários.