
Python 多年来一直受到性能方面的批评。
与 C、C++、Rust 以及其他编译型语言相比,CPython 在 CPU 密集型工作负载下确实可能慢很多。Global Interpreter Lock(GIL)、动态类型、对象分配以及解释器开销,长期以来限制了纯 Python 代码的执行速度。
但近年来,Python 的性能情况已经发生了明显变化。
从 Python 3.11 开始,CPython 开发团队将解释器性能作为重点工作。Faster CPython 项目引入了一系列改进,目标是降低解释器开销、对频繁执行的操作进行专门化、改善启动时间,并最终引入 JIT 编译。
所以,现在有趣的问题已经不再只是:
“Python 慢吗?”
更好的问题是:
“Python 到底变快了多少?”
Python 3.11 是一个重要转折点
Python 3.11 于 2022 年 10 月发布,是近年来 Python 最重要的性能版本之一。
根据 Python 官方文档,在 pyperformance 基准测试套件中,CPython 3.11 平均比 Python 3.10 快约 25%。
根据不同工作负载,性能提升大约在 10% 到 60% 之间。
这些提升来自大量解释器层面的优化,而不是某一个单独的技巧。
其中一个最重要的变化是 PEP 659,它引入了 specializing adaptive interpreter。
基本思路其实比较直接。
Python 是动态语言,但很多操作在运行时其实具有很强的可预测性。
例如,如果一段代码反复对两个整数执行加法,解释器并不一定需要每次都把它当成完全未知的操作处理。它可以观察实际发生的情况,并针对实际遇到的类型对执行路径进行专门化。
Python 3.11 还改变了 Python 函数调用在内部的处理方式。许多 Python-to-Python 调用可以避免一部分传统的 C stack 开销。
结果是,普通 Python 代码执行时可以承担更少的解释器开销。
启动性能也得到了改善。核心模块通过冻结和静态分配等方式,减少了 Python 启动过程中需要完成的工作。Python 官方文档显示,Python 3.11 的启动速度提升大约为 10–15%。
这是一个重要的方向变化。
Python 3.12 继续进行优化
Python 3.12 没有带来又一次全面的 25% 性能提升,但它继续改善了特定工作负载。
其中一个比较有意思的优化来自 PEP 709,它对 list、dictionary 和 set comprehensions 进行了内联。
此前,推导式需要创建独立的 code object 和 frame。Python 3.12 可以在外围代码中更直接地执行推导式。
对于 PEP 中描述的推导式专用微基准测试,实现速度接近 2 倍。
一个大量使用推导式的、更贴近实际的基准测试显示,性能提升约为 11%。
这里有一个重要区别。
某个基准测试显示某项操作快了 2 倍,并不意味着整个 Python interpreter 快了 2 倍。
真实应用包含很多不同的操作,而某一项特定优化只能影响其中一部分执行过程。
Python 3.12 还加入了许多其他性能改进。官方发布文档估计,这些优化综合起来带来了约 5% 的整体性能提升。
因此,Python 的性能提升越来越多地来自大量相对较小的优化逐步累积。
Python 3.13 开始向 JIT 迈进
Python 3.13 又向前迈出了重要一步。
它通过 PEP 744 引入了实验性的 JIT compiler。
不过,需要正确理解这意味着什么。
Python 3.13 并没有突然变成一种与那些长期依赖 JIT 编译的语言类似的 JIT-compiled language。
JIT 仍然处于实验阶段,并且默认关闭。官方文档描述的初始性能提升比较有限,同时预计未来 Python 版本会继续改善它。
它的架构同样值得关注。
Python 3.13 引入了 Tier 2 intermediate representation,以及最终可以将经过优化的 Python 执行过程转换为 machine code 的处理流程。
简单来说,解释器现在可以经过这样的阶段:
Python code → bytecode → specialized execution → intermediate representation → machine code
JIT 主要针对 hot paths,而 cold code 仍然可以继续通过解释器执行。这为未来的优化提供了基础。
与此同时,Python 3.13 引入了实验性的 free-threaded CPython,可以关闭 GIL。
这还有另外一个重要意义。
过去,GIL 阻止单个 CPython 进程中的多个线程同时执行 Python bytecode。Free-threaded builds 移除了这一限制,使 Python threads 可以在多个 CPU cores 上并行执行。
但这也存在代价。
Python 官方文档显示,与正常的 GIL-enabled build 相比,Python 3.13 的 free-threaded build 在 pyperformance 套件上的开销约为 40%。项目预计未来会继续降低这一开销。
此外,移除 GIL 并不会自动让现有的多线程程序变得更快,也不会自动让它们具备线程安全性。应用代码和第三方库仍然需要正确处理同步以及共享状态的访问。
因此,Python 3.13 的 free-threading 应该被看作一个重要的架构里程碑,而不能简单理解为免费的性能提升。
Python 3.14 仍在继续推动性能提升
Python 3.14 延续了这一方向。
其中一个值得注意的变化,是新的 interpreter implementation 使用实现各个 Python opcode 的小型 C functions 之间的 tail calls。
这是 C 层 interpreter 实现中的内部优化。它并没有为 Python 增加尾调用优化(TCO);Python 源代码本身仍然不会自动进行尾递归优化。
初步基准测试显示,在支持的平台和配置上,标准 pyperformance 套件取得了 3–5% 的几何平均性能提升。
Free-threaded CPython 也有了明显改善。
Python 3.14 在 free-threaded mode 中启用了 specializing adaptive interpreter,并加入了其他优化。根据官方文档,其单线程性能开销现在约为 5–10%,具体取决于平台和 compiler。
与 Python 3.13 报告的约 40% 开销相比,这是一个明显的变化。
实验性的 JIT 也在继续发展。
目标并不是一夜之间替换掉 interpreter,而是构建一个多层执行系统,让 cold code 付出较少的执行成本,同时对真正变成 hot 的代码应用更激进的优化。
那么,现在 Python 到底快了多少?
没有一个单独的数字可以准确回答这个问题。
不同基准测试会得到不同结果,而且不同 Python 版本的性能提升也不能简单相加。
不过,我们仍然可以看到一个比较清晰的整体趋势。
Python 3.11 在标准 pyperformance 套件上平均比 Python 3.10 提升约 25%,不同工作负载的提升达到 10–60%。
Python 3.12 又加入了一系列优化,官方文档估计整体提升约为 5%。
Python 3.13 在继续优化 interpreter 的同时,引入了实验性的 JIT 和 free-threading 能力。
Python 3.14 继续改善 interpreter、JIT infrastructure 和 free-threaded execution。CPython 核心开发者 Ken Jin 在 2025 年的一次讨论中提到,在部分基准测试和工作负载中,Python 3.14 相比 Python 3.10 有 20–40% 的性能提升。这是一个较宽泛的项目级比较,并不代表所有应用都能获得这样的加速,也不是全局平均值。
重要的是,Python 并没有突然变得和 C++ 或 Rust 一样快。
但它们之间的性能差距已经不再是静态的。
Python 正在以另一种方式变快
最大的变化可能并不是某个具体的百分比。
过去很多年,Python 的性能优化往往意味着将性能关键代码移到 C extensions 中,使用 NumPy、multiprocessing、PyPy 或其他专门的技术。
现在,CPython 自身正在变得更加复杂和高效。
Interpreter 会对常见操作进行专门化。
Compiler 会减少不必要的运行时开销。
Runtime 会改善启动和函数调用。
JIT 为 machine-code execution 提供了路径。
Free-threading 为 Python code 的真正并行执行提供了路径。
这些变化发生在不同层面,并针对不同的性能瓶颈。
这也解释了为什么说“Python 快了 30%”可能会产生误导。
如果一个 Web application 主要消耗在 database queries 上,那么 interpreter 更快可能几乎不会带来收益。
如果一个 numerical workload 主要由 Python loops 实现,那么可能会获得比较明显的收益。
如果一个 application 主要依赖 C extensions,那么它的性能表现可能完全不同。
工作负载仍然很重要。
Python 的性能问题已经发生变化
Python 仍然不是一种 low-level language。
如果主要目标是最大化原始 CPU 性能,那么 C++、Rust 以及类似的 systems languages 仍然是重要选择。
但 CPython 的性能已经有了明显提升,尤其是从 Python 3.11 开始。
更值得关注的是,Python 的性能优化现在正在持续发生在 interpreter 层面。
Python 3.11 带来了重大性能提升。
Python 3.12 继续优化常见的语言结构。
Python 3.13 引入了实验性的 JIT 和 free-threading。
Python 3.14 继续降低 interpreter 开销,并改善 free-threaded execution。
所以,过去那句“Python 很慢”正在变得越来越不完整。
更准确的描述可能是:
Python 仍然需要为它的动态、高级设计付出成本,但 CPython 正在越来越擅长降低这种设计带来的成本。
而接下来的几个 Python 版本会决定这一趋势究竟能够走多远。
以上就是“Python 性能为什么总被吐槽?这几年它到底变快了多少?”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/14552/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料