Python 3.13 允许禁用 GIL + 子解释器

Python 3.13 允许禁用 GIL + 子解释器

💡 原文英文,约400词,阅读约需2分钟。
📝

内容提要

Python 3.13新增了通过PEP 703删除全局解释器锁(GIL)的功能,可以禁用GIL以提高Python代码的性能。子解释器增强使得在当前进程中可以使用多个解释器。

🔎

延伸解读

GIL 移除的当前状态与风险

Python 3.13 中 GIL 移除功能默认关闭,需通过构建标志 Py_GIL_DISABLED 启用,并可使用命令行标志或环境变量禁用 GIL。由于移除 GIL 可能导致初期 bug,官方将其作为实验性构建选项,预计到 3.14 左右才能修复大部分问题。因此,生产环境应谨慎评估,避免直接依赖无 GIL 版本。

子解释器:进程内并行的新途径

子解释器增强(PEP 554 和 PEP 734)允许在当前进程内创建和运行多个解释器,新模块 interpreters 将提供检查、创建和运行解释器的能力,并包含基本的 Queue 类用于解释器间通信。此外,还将添加基于该模块的 concurrent.futures.InterpreterPoolExecutor。这为进程内并行提供了新选择,但相关功能仍在开发中。

性能提升的潜力与实测案例

移除 GIL 和子解释器都有望提升 Python 代码的速度和效率。Peter Sobot 测试了 GIL 移除标志,发现 pedalboard 包中某些进程的速度提升达 17 倍。不过,这一结果仅针对特定场景,实际收益可能因工作负载而异,且无 GIL 版本尚不稳定,需等待后续版本完善。

❓

Q&A

Python 3.13中GIL的作用是什么?

GIL使得Python中的线程管理更简单,防止竞争条件,但限制了每个CPU核心的多线程运行。

如何在Python 3.13中禁用GIL?

可以通过命令行标志或环境变量禁用GIL,但需要使用Py_GIL_DISABLED标志构建Python。

移除GIL可能带来什么问题?

移除GIL可能导致Python初期出现bug,因此GIL-less版本将作为构建标志,默认仍然开启。

Python 3.13中子解释器的功能是什么?

子解释器增强允许在当前进程中检查、创建和运行多个解释器,并提供基本的Queue类以便于解释器之间的通信。

PEP 703和PEP 554的主要内容是什么?

PEP 703涉及GIL的移除,而PEP 554描述了子解释器的使用和实现。

移除GIL后,Python代码的性能会如何变化?

移除GIL可能使Python代码性能提升,某些进程的速度提升可达17倍,但初期可能会出现bug。

🏷️

标签

➡️

继续阅读