Python 3.13 获首个 Beta 版更新:改进解释器 / 编译器性能
Python 3.13 beta 1发布了,主要新特性包括禁用全局解释器锁(GIL)以进行自由线程处理的选项,以及一个实验性的即时编译器,两者都可以提高性能。Beta版本的出现也意味着3.13版本已经冻结了功能。
大多数排名 - 比如来自Redmonk的这个排名 - 将Python排在流行程度仅次于JavaScript的第二位,由于与人工智能和机器学习的关联,使用量正在增加。不过,CPython相对较慢,其结果是性能成为近期版本的关注重点。
版本3.13包括发行说明称为“基本JIT编译器”的内容,尽管目前默认情况下已禁用。针对此功能的PEP(Python增强提案)解释称,这是“与CPython传统执行Python代码的方式明显不同的一步”。目前Python编译为字节码,然后在运行时进行解释。Python 3.12已经包括了将指令分解为更小的微操作然后对其进行优化的代码,但目前执行此操作的开销超过了性能的好处,因此已禁用。
JIT编译器进一步采取了静态编译优化微操作的步骤,旨在克服瓶颈并提高性能。它不会启用,直到满足几个条件,包括至少有5%的性能改进,对部署的干扰最小,以及得到Python steering council的批准。还有可能的安全性问题,另一个缺点是在运行时内存使用更多。
为什么包含了此功能但默认情况下已禁用?目前,“JIT的速度与现有的专用解释器几乎一样快”,因此尚未达到5%的性能增长目标;但是,此功能的作者表示,即使这样,这也是一个“重要的成就,这也是为什么这种方法被认为足够可行而被合并到主分支进行进一步开发的主要原因”。已经有许多改进正在进行中,因此这很可能成为未来的性能提升。
Python 3.13中的另一个关键实验是使GIL成为可选项,从而消除了并发的一个主要障碍。根据PEP,“这种缺乏并发性通常比执行Python代码的速度更大的问题。”另一个优点是Python代码将更能够表达并行性,这对于使代码更易于维护,并将Python作为学习编程语言的语言具有重要意义。
在3.13版本中还有更多内容,包括一个新的交互式shell,其中包括带颜色的提示,带有历史记录保留的多行编辑,以及使用F1键进行帮助浏览。但这只在类Unix系统(如macOS和Linux)上有效。
Apple的iOS现在将成为Python的支持平台,但仅为第3级(三个支持级别中的一个),不包括控制台或交互式使用。
3.13版本中没有新的模块,但许多模块有改进。一些模块将被新的弃用,等待在3.14、3.15或3.16版本中移除。
Python 3.13发布计划包括四个beta版本和两个发行候选版本,最终版本预计于2024年10月初发布。尽管功能冻结,但发布经理Thomas Wouters表示,“直到发行候选版本阶段开始之前,功能可能会被修改,或者在极少数情况下被删除。”该阶段定于7月底开始。
主要更新内容如下:
- 引入了全新交互式解释器,改进了性能,同时支持多行编辑 / 颜色;
- 引入了“实验性”自由线程构建模式,通过让全局解释器锁成为可选,从而允许线程更并发地运行(为了实现相关模式,同时引入了 mimalloc 的修改版本);
- 改进了即时编译器 (JIT) 性能;
- 循环垃圾收集器现在更具增量性,收集垃圾时间应当更短;
- 减少了 RAM 用量及 .pyc 文件的体积;
- 为 dbm 模块添加了新的 dbm.sqlite3 后端,现在在创建新文件时默认使用。