主要观点:
- 五年前开始致力于通过 Webassembly 让更多语言在网络及其他领域发挥作用,Python 是热门语言但在 WebAssembly 中的性能不佳。
- 发布
py2wasm
,这是一个将 Python 转换为 WebAssembly 的编译器,比基线解释器快 3 倍,运行环境需 Python 3.11。 - 分析了在 WebAssembly 中加速 Python 的多种策略,包括使用 Python 子集、Python JIT 和静态分析等,最终确定使用 Nuitka 效果较好。
- 用 Nuitka 编译 Python 到 WebAssembly 时遇到架构不匹配等问题,已创建 PR 并希望将其整合上游,未来计划将
py2wasm
作为 Wasmer 包发布。
关键信息:
py2wasm
可将 Python 程序转换为 WebAssembly 并运行,速度比常规 WebAssembly 中的 CPython 快约 2.5 - 3 倍,比原生 Python 慢约 70%。- 加速 Python 的策略有使用 Python 子集(如 CPython、RPython、Codon 等)、Python JIT(如 PyPy)和静态分析(如 Mypy、Nuitka 等)。
- Nuitka 通过将 Python 代码转换为底层 CPython 调用进行编译,虽存在与 WebAssembly 架构不匹配等问题,但经修复后已能正常工作,
py2wasm
基于 Nuitka 开发。
重要细节:
- 展示了不同方式运行
pystone.py
基准测试的结果,如原生 Python 为 387k pystones/second,WebAssembly 中的 CPython 为 89k pystones/second,py2wasm 为 235k pystones/second。 - Nuitka 不支持 Python 3.12,需将 Python 重新编译为 3.11 用于 WebAssembly 和 WASI 生成
libpython.a
库。 py2wasm
首先用于满足自身需求,将 Python Django 后端从 Google Cloud 迁移到 Wasmer Edge,未来计划作为 Wasmer 包发布,可通过wasmer run py2wasm --dir=. -- myfile.py -o myfile.wasm
运行。- 文章基于 2024 年 3 月 15 日在 Wasm I/O 会议上的工作,幻灯片在 SpeakerDeck 可查看,视频在 Youtube 可观看。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。