Python 基金会于 2024 年 10 月初发布了 Python 3.13。该版本的主要技术演进是引入了在 PEP 703 实现中定义的“Free-threaded”模式,它会禁用 GIL(Global Interpreter Lock)。
通俗解读
在此之前,Python 解释器就像一个只有一支话筒在传递的房间:多个线程可以并存,但一次只有一个能发言,因为 GIL 阻止它们同时执行字节码。在多核机器上,这意味着程序一旦试图并行计算,可用算力就有一部分闲置。Python 3.13 让这把锁变成可选:现在可以按需编译解释器,把计算负载分摊到所有可用的物理核心上,而不产生阻塞。但保留意见不小——该功能以实验性质提供,GIL 默认仍然启用,用 C 开发的库需要做适配。因此这是一场过渡的开端,而非立刻切换。
版本概览
| 参数 | 内容 |
|---|---|
| 版本 | Python 3.13 |
| 发布方 | Python 基金会 |
| 发布时间 | 2024 年 10 月初 |
| 主要技术演进 | 引入“Free-threaded”模式 |
| 规范 | PEP 703 — Making the Global Interpreter Lock Optional in CPython |
| 技术效果 | 禁用 GIL(Global Interpreter Lock) |
| 实施方式 | 由开发者编译解释器 |
| 状态 | 实验性 —— GIL 默认仍然启用 |
| 生态前提 | 用 C 开发的库需要适配 |
| 目标范围 | 线程在多核架构上真正并行执行 |
技术解释
1. GIL 锁住了什么 —— 历来,GIL 阻止同一个 Python 解释器中的多个线程同时执行字节码。
2. 在多核处理器上的代价 —— 这一约束严重限制了并行应用在多核处理器上的性能。
3. Free-threaded 模式带来了什么 —— 在该版本中,开发者可以编译解释器,把计算负载分摊到所有可用的物理核心上,而不产生阻塞。
前后对比
| 方面 | 带 GIL 的解释器 | Free-threaded 模式(Python 3.13) |
|---|---|---|
| 字节码执行 | 同一解释器中一次仅一个线程 | 线程真正并行 |
| 核心利用 | 并行应用在多核处理器上的性能严重受限 | 计算负载分摊到所有可用的物理核心 |
| 阻塞 | 对字节码执行的全局锁 | 不产生阻塞 |
| 启用方式 | 默认行为 | 专门编译解释器,以实验性质提供 |
| 用 C 开发的库 | 沿用原有行为 | 需要适配 |
因果链
解释器中历来存在的 GIL → 一次只有一个线程执行字节码 → 并行应用在多核处理器上的性能严重受限 → PEP 703:让这把锁变为可选 → Python 3.13 引入 Free-threaded 模式 → 解释器可编译为把计算分摊到所有可用的物理核心 → 用 C 开发的库进行适配 → Python 生态向全面多核优化过渡
局限与范围
尽管该功能以实验性质提供(GIL 默认仍然启用),且需要对用 C 开发的库进行适配,此次发布仍开启了 Python 生态向全面多核优化的过渡。
来源
2026 年 8 月事实核查中验证过的参考资料:本简报的论断即依据这些页面进行核对。
