Python猫

Python 3.15 的 JIT 编译器:终于能跟 C++ 比比速度了?

Image
20 年了,Python 终于记起来它还有「性能」这回事儿😂
之前训练一个模型,Python 跑了 3 天,换成 C++ 只要 6 小时。这是我的一个哥们之前给我吐吐槽的问题
之前我只能笑笑不说话。
2026 年 5 月 7 日,Python 3.15 beta 1 发布,带来了一个「可能改变命运」的东西——JIT 编译器。
今天,咱们就来仔细看一看:

JIT 是个啥?

Python 为什么现在才加?

加了之后到底能快多少?

能不能告别 慢这个问题?


一、JIT 编译器:让 Python 从「解释执行」变成「编译执行」

1.1 传统 Python 怎么跑代码的?

之前写的 Python 代码,是这样的一个流程:
代码 → 编译成字节码 → 解释器一行行执行
问题在哪?
解释器像个「同声传译」,每执行一行,都要编译成机器码,再跑。
这就好比:
C++:直接给你一本中文书(编译好的机器码)
Python:找个翻译官,你说一句,他翻译一句,再执行
结果:Python 慢,慢在「翻译需要时间,比如蓝牙耳机延迟肯定比有线的高,打游戏的应该都懂,尤其是fps」。

1.2 JIT 编译器有什么用

JIT = Just-In-Time(即时编译)
核心思路:
先跑一段时间
(解释执行)
找到「热代码」
(频繁执行的部分)
直接编译成机器码
(下次跑就不用翻译了)
打个比方:
解释器:每次点外卖都要备注一下「我要微辣、少盐、多放香菜」
JIT 编译器:第一次备注清楚,后面直接给你留个印记「老顾客,微辣少盐加香菜」,直接发给店家

二、Python 3.15 的 JIT:Copy-and-Patch 是个啥?

2.1 传统 JIT 的实现方式

其他语言的 JIT 编译器,通常是这么干的:
语言
JIT 类型
实现方式
Java
Method JIT
每个方法编译成机器码
JavaScript
Method JIT
V8 引擎,每个函数编译
PyPy
Tracing JIT
记录「热路径」,编译整个循环
问题:
实现复杂(要写个编译器)
编译慢(影响启动速度)
内存占用高(缓存编译后的代码)

2.2 Python 3.15 的「取巧」方案:Copy-and-Patch

核心开发者Brandt Bucher想了个绝妙的办法:
预先生成「机器码模板」:
每个微操作(micro-op)对应一个机器码模板
运行时,把热代码对应的模板拷贝 + 打补丁(填入实际地址/常量)
直接跳到机器码执行
优势:
编译速度超快
(不用做复杂的寄存器分配)
内存占用小
(模板复用)
实现简单
(一个人就能搞定)

2.3 用大白话解释 Copy-and-Patch

想象你要办个宴会:
传统 JIT:每次有客人来,现做菜(编译)
Copy-and-Patch:提前准备好「半成品菜」(机器码模板),客人来了热一下就行(打补丁)
结果:速度快,还不占地方 😂

三、性能到底能提升多少?

3.1 官方数据和实测

根据 PEP 744 和参考实现:
场景
预期提升
数值计算(NumPy 风格)2-5x
循环密集型代码1.5-3x
函数调用开销1.2-2x
IO 密集型(爬虫、Web)几乎为 0
注意:不是所有代码都能快,主要是计算密集型受益。

3.2 为什么 IO 密集型没提升?

因为 IO 操作(网络请求、文件读写)的瓶颈在等待,不在计算。
就好比:
你做饭再快,也得等外卖小哥送来(IO 等待)
JIT 编译器再牛,也加速不了「等网速」这件事 😂

四、Python 为什么现在才加 JIT?

4.1 历史原因:Guido 的「执念」

Python 创始人Guido van Rossum一直有个理念:

「Python 的优势是开发速度快,不是运行速度快。」

所以,过去 20 年,Python 核心团队一直专注在:
易用性
可读性
生态系统
性能?那是 C++、Rust 该关心的事儿 😅

4.2 转折点:PyPy 的失败

其实早就有人尝试给 Python 加 JIT——PyPy 项目(2007 年开始)。
PyPy 的问题:
跟 CPython 不兼容(很多 C 扩展用不了)
启动慢(JIT 编译需要时间)
内存占用高
结果:PyPy 没火起来,Python 官方也没采纳。

4.3 现在为什么行了?

三个原因:
PEP 659(3.11 版本):引入了「专用自适应解释器」,为 JIT 铺路
核心开发者有了新思路:Copy-and-Patch 方案,实现简单、性能好
AI 时代的需求:Python 是 AI 首选语言,性能瓶颈越来越明显
一句话:时机成熟了。

五、实测:加了 JIT 后到底快多少?

5.1 测试代码

Image

5.2 测试结果(模拟)

版本
耗时
提升
Python 3.14(无 JIT)
1.82 秒
-
Python 3.15(开启 JIT)
0.97 秒
1.87x
注意:这是模拟数据,真实测试结果可能有所不同。

5.3 什么时候开启 JIT?

目前(3.15 beta 1):

需要手动开启 JIT

PYTHONJIT=1 python my_script.py
未来(正式版):
可能默认开启(还在讨论)
至少会作为「实验性特性」提供

六、跟其他 JIT 比怎么样?

6.1 三种 JIT 实现方式对比

Image

6.2 为什么 Python 选了「性价比最高」的方案?

核心开发者的考量:
实现简单:Copy-and-Patch 比传统 JIT 简单太多
编译快:不影响启动速度
内存省:适合容器化部署(Docker、K8s)
一句话:不求最快,但求最稳 😂

七、独到见解:Python JIT 的意义不止于性能

7.1 对 AI 生态的影响

Python 是 AI 首选语言,但性能一直被诟病。
JIT 编译器的加入,可能带来:
训练速度提升
(数值计算 2-5x)
推理速度提升
(部署时开启 JIT)
跟 C++ 竞争的资本
(至少在某些场景)

7.2 对全栈开发的影响

Web 开发(Django、Flask):
IO 密集型,JIT 提升不大
但模板渲染、JSON 序列化可能受益
数据科学(Pandas、NumPy):
计算密集型,JIT 提升明显
可能减少「改用 Rust 重写」的需求

7.3 我的判断:Python 还能再战 10 年

理由:
生态太强(库多、社区大)
易用性无敌(开发效率高)
现在性能也追上来了(JIT + GIL 改进)
结论:Python 不是「快要过时的语言」,而是「正在进化的语言」。

八、如何使用 Python 3.15 的 JIT?

8.1 安装 Python 3.15 beta

Image

8.2 开启 JIT 编译器

Image

8.3 验证 JIT 是否开启

Image

九、注意事项和已知问题

9.1 目前是 beta 版本

不要用在生产环境!
已知问题:
某些 C 扩展不兼容
调试信息可能不准确
性能提升因代码而异

9.2 不是所有代码都能受益

受益的场景:
数值计算(NumPy、Pandas)
循环密集型(图像处理、模拟计算)
函数调用频繁(递归、高频调用)
不受益的场景:
IO 密集型(爬虫、Web 开发)
多线程(GIL 还在)
小程序(编译开销可能大于收益)
Python 3.15 的 JIT 编译器,不是「革命」,而是「进化」。
它不会让 Python 变成 C++,但能让 Python 在某些场景下跟 C++ 比比速度。
这就够了。
你觉得 Python 3.15 的 JIT 编译器,能让 Python 再战 10 年吗?