当前位置: 首页 > news >正文

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 版本开始。

http://www.jsqmd.com/news/1004040/

相关文章:

  • StudyFetch:一个 AI 学习工具,怎么靠短视频做到 700 万用户
  • 计算机毕业设计之医疗大数据在疾病预测中的应用探索
  • 2026哈尔滨本地广告投放公司TOP4:行业实力总结 - 最新行业资讯
  • 9.9元包邮的YD-RP2040,如何用MicroPython的lcd_i2c库玩转1602屏幕?
  • 3分钟学会:百度网盘提取码智能获取工具完全指南
  • 如何用XUnity自动翻译器轻松打破Unity游戏语言壁垒:完整新手入门指南
  • 【篮球英语】README
  • 别只用来抓包了!Fiddler这些隐藏功能让你的开发效率翻倍
  • DLSS Swapper终极指南:3步轻松管理游戏DLSS版本,提升显卡性能
  • SAS与Python交互实战:保schema、低延迟、合规范的四大生产方案
  • 十大AI培训学校,AI培训机构十大排名(2026年最新6月版) - 全国职业学校推荐官
  • 宁波登攀科技汽车塑胶件注塑加工工艺
  • 性价比高的大平层装修设计公司推荐 - mypinpai
  • 保姆级教程:H3C S6520交换机端口状态信息全解析(从Speed/Duplex到Peak Rate)
  • 2026 世界杯跨境热销,店群卖家巧用工具避开合规风险
  • 如何用3分钟将B站视频变成可编辑文字稿?bili2text智能转录工具完整指南
  • 告别配置混乱:在AUTOSAR MCAL框架下,如何正确配置S32G3的SIUL2引脚(Port/Dio模块详解)
  • 【JAVA毕设源码分享】基于SpringBooot的图书商城系统研究与设计(程序+文档+代码讲解+一条龙定制)
  • GPTs与人类众包真实文本标注能力六维对比
  • 告别信号玄学:手把手教你用PCIe 4.0的RX Lane Margining功能实测信号余量
  • 保姆级教程:用Google Earth Engine搞定Invest模型最难搞的Kc系数表
  • 打卡信奥刷题(3382)用C++实现信奥题 P9813 [CCC 2015 S4] Convex Hull
  • 性价比高的直流电机厂家推荐,品牌口碑大揭秘 - mypinpai
  • 前后端分离Web宠物商城网站系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • MHmarkets迈汇平台:外汇投教内容建设与外汇行业合规表达如何影响体验
  • 手把手教你搞定RK3568上的广和通FG650 5G模组:从内核驱动到一键上网脚本
  • 别再只会git pull了!手把手教你用VSCode的GitLens插件可视化解决代码冲突
  • 终极MMD创作神器:如何用Blender插件完美导入导出MMD模型与动画
  • 终极百度网盘下载加速指南:3分钟解锁高速直链的秘密
  • 手把手教你用BAPI_REQUISITION_CREATE批量建PR,并搞定EXTENSIONIN传自定义字段(附避坑点)