news 2026/6/13 8:02:56

Pyston:给 Python 插上 JIT 翅膀,性能提升 30%

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pyston:给 Python 插上 JIT 翅膀,性能提升 30%

文章目录

  • Pyston:给 Python 插上 JIT 翅膀,性能提升 30%
    • 核心技术
    • 兼容性
    • 项目历程

Pyston:给 Python 插上 JIT 翅膀,性能提升 30%

Dropbox 在 2014 年启动了一个内部项目 Pyston,目标是给 Python 加上 JIT 编译能力,降低服务器成本。项目经历关停、重启、被 Anaconda 收购,到现在依然活跃在开源社区,收获了 2500 个 Star。

Pyston 提供两个版本:full 和 lite。前者是一个完整的 CPython 替代方案,后者是一个可 pip 安装的扩展模块。

Pyston-full 基于 CPython 3.8.12,集成了 JIT 编译器和其他优化手段。在 Web 服务基准测试中,它比标准 CPython 快约 30%。要尝试的话,从 GitHub Releases 页面下载安装包即可。官方也提供了 Docker 镜像,一条命令就能体验:docker run -it pyston/pyston。还有一个精简版镜像pyston/slim可供选择,减少了预装库的体积。

Pyston-lite 是纯 JIT 扩展,支持 Python 3.7 到 3.10。安装方式极其简单:pip install pyston_lite_autoload。这条命令会安装 JIT 引擎和一个自动加载器,Python 启动时自动激活 JIT。性能提升约 10%,但胜在兼容性好,现有二进制包无需任何修改。

核心技术

Pyston 用 DynASM 实现了低开销的 JIT 引擎。DynASM 是一个轻量级的动态汇编器,能在运行时生成机器码,同时保持较低的启动开销。这与传统 JIT 方案不同,后者往往需要预热阶段才能达到最佳性能。

除了 JIT,Pyston 还引入了 Quickening 技术。简单来说,它在程序运行时观察哪些字节码被频繁执行,然后把这些字节码替换为更高效的专用版本。配合属性缓存策略,同一个对象的属性访问结果被缓存下来,后续访问直接命中缓存,减少了每次查找的开销。

Full 版本额外包含 LTO(链接时优化)和 PGO(性能导向优化)。这些优化能进一步提升最终程序的运行时性能,但代价是首次构建需要较长时间,因为 LLVM 需要编译两次。

兼容性

Full 版本的问题是 API 兼容但 ABI 不兼容。这意味着用 pip 安装的 C 扩展需要重新编译才能运行,因为 Pyston 修改了 CPython 内部的 ABI 接口。目前社区还没有为 Pyston 提供预编译的 wheel 包,所以安装过程会触发编译步骤。如果遇到编译失败,通常和直接在 CPython 上编译该包遇到的问题一致。

Lite 版本不存在这些麻烦。它作为扩展模块加载到标准 CPython 中,与现有二进制包完全兼容。日常使用中推荐先尝试 Lite 版本,如果对性能有更高要求再考虑迁移到 Full 版本。

项目历程

Pyston v1 是 Dropbox 从零实现的 Python 2.7,采用 LLVM 作为后端编译方案,包含追踪垃圾回收器。2017 年 Dropbox 决定将主力开发语言迁移到其他选择,Pyston 项目随之关停。当时 Pyston v1 已经能够运行 Dropbox 的代码库,但存在内存占用偏高和兼容性问题。

2019 年,原开发团队在没有企业赞助的情况下重启项目,这次选择了不同的路线。他们不再从零实现,而是直接 fork CPython 3.8,在其基础上集成 JIT 和其他优化,称为 Pyston v2。2021 年团队加入 Anaconda,获得资金支持和打包工程能力。2022 年,团队根据用户反馈发布了 pyston-lite,降低了使用门槛。

Pyston 解决的问题很直接:让已有的 Python 代码跑得更快,不需要修改代码。对运行 Python 服务的团队来说,30% 的性能提升意味着可观的成本节省。如果项目对性能有要求又不打算换语言,可以尝试 Pyston,尤其是从 Lite 版本开始。

又不打算换语言,可以尝试 Pyston,尤其是从 Lite 版本开始。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 8:00:02

别再用NLTK了!试试spaCy 3.6.0,5分钟搞定中文分词和命名实体识别

告别传统NLP工具:spaCy 3.6.0中文处理实战指南在自然语言处理领域,开发者们常常面临工具选择的困境。传统工具如NLTK虽然功能全面,但在处理中文任务时往往显得笨重且效率低下。而现代NLP库spaCy以其简洁的API设计和高效的执行速度&#xff0c…

作者头像 李华
网站建设 2026/6/13 7:59:52

004 数字音频的编解码格式介绍

数字音频的编解码,本质上就是对原始音频数据做 “压缩-还原” 的处理过程。之所以要做编解码,其核心是为了解决音频容量和传输的问题,使传输的音频数据 体积变小以节省存储空间、降低传输带宽的需求、适配不同应用场景的特定需求、提高传输时…

作者头像 李华
网站建设 2026/6/13 7:55:52

wijmo-5.20261.50--JavaScript UI

wijmo-5.20261.50灵活的 JavaScript UI 组件,借助 Wijmo,您可以利用我们动态、轻量级的 JavaScript 组件库,将更多精力集中在应用程序的核心功能上。交付卓越的高性能应用程序。了解 Wijmo 的独特之处我们的库是用 TypeScript 构建的&#xf…

作者头像 李华