CPython 的全局解释器锁(“GIL”)可防止多个线程同时执行 Python 代码。
GIL 是高效使用 Python 多核 CPU 的障碍。
PEP-0703 建议向 CPython 添加构建配置 ( --disable-gil),使其在没有全局解释器锁的情况下运行 Python 代码,并进行必要的更改以使解释器线程安全。
也就是说Python 将删除其 GIL,计划路线图:
- 短期内,一个不支持 GIL 的 Python 实验版本将与常规版本同时发布。目标是 3.13/3.14。
- 中期,无 GIL 版本被标记为正式支持版本,但仍只是有 GIL 的 Python 的替代版本。宣布了将其作为默认版本的目标日期。这只有在社区对其表示出足够的支持后才会实现,需要几年的时间。
- 从长远来看,无 GIL 将成为默认设置。在此之前,如果事实证明 no-GIL 项目的投资回报率很低,核心开发人员可以推翻决定,中止该项目。
请注意,如果程序导入了一个在无 GIL 版本中使用 GIL 的 C 扩展名,它就会自动切换回 GIL。因此,这并不是 2=>3 的情况,即不兼容的代码会中断。
采用两种不同构建方式的主要原因是为了管理未知的未知因素。
的确,没有人会认为无 GIL 会导致代码崩溃,但对于如此庞大的项目,你永远无法确定。
ABI 兼容是个棘手的问题,新的扩展程序需要明确地针对它进行编译才能正常工作,因此社区有必要接受它。
此外,不兼容 GIL 的扩展也能在旧的解释器上运行,因此不会出现 Python 3 代码在 Python 2 上无法运行的情况。
事实上,Python 代码本身应该不会受到影响,而且可以在两种解释器上无缝运行,尽管 GIL 将线程限制在单核上。
LPython:新的 Python 编译器
LPython 是一种新的 BSD 3 编译器,它能将 Python 代码转换为 LLVM、C、C++ 或 WASM 的代码。
它的目标不是编译整个程序,尽管它可以,而是像 numba 和 cython 一样,让你加速计算瓶颈。
虽然你仍然需要在机器上安装整个编译链,但它的基准测试结果非常令人满意,而且在 Ahead-of-Time 和 Just-in-Time 之间切换也非常方便。
LPython 喜欢原始的 Python 代码,所以如果你在代码段中调用 Python 函数,你必须明确地用装饰器将其标记为原始代码。因此,大多数人可能会在非常特殊的代码段中使用它。
Pydantic 2 即将投入使用
Pydantic 第 2 版实现数据验证/模式定义。
它在上个月发布了稳定版,事实上,即使是稳定的主要版本,也仍然需要改进,而且社区支持仍然很少。
但现在发生了两件事:
- Pydantic 2.1 已经发布,第一波令人讨厌的错误已被清除。
- Fast API 宣布支持 Pydantic 2,因为它是 Pydantic 使用的最大驱动力,所以具有里程碑意义。
PEP 387 定义 "软弃用",getopt 和 optparse 软弃用
基本上,软弃用 API 处于僵尸状态,能用但永远不会有任何新开发,而且会被明确建议不要使用。
optparse 和 getopt 这两个模块在它们的时代曾是解析脚本参数的事实解决方案,但现在已被标记为 "软废弃"。你可以永远使用它们,但可能不应该使用。
- 首先,argparse 是更现代的 stdlib 解决方案。
- 其次,像 typer 和 click 这样的第三方项目已经存在。
Cython 3.0 发布,更好地支持纯 Python
最著名的 Python 编译器 Cython 发布了第 3 版。尽管该版本带来了各种改进,但有一点尤为突出。Cython 一直存在局限性:它使用 Python 的超集来表达某些特性。
正如该版本所指出的,这种情况已不复存在:"现在可以用常规 Python 语法来表达所有 Cython 代码并使用所有功能。
这意味着您现在可以使用任何 Python 代码库,只需将其全部 Cython 化,看看会发生什么。
PEP 722 - 单文件脚本的依赖关系规范
虽然无 GIL 的话题仍然存在,但 PEP 722的提出确实让事情变得更加热闹。
我们的想法是在注释中形式化一种语法,类似于 Groovy 的语法,可以表达单个脚本的依赖关系。以 PEP 本身为例:
In order to run, this script needs the following 3rd party libraries |
现在,第三方工具可以正式解析这些注释。这并不是一个新概念,像 pip-run 这样的工具已经支持运行带有此类注释的脚本。
PEP 并不意味着 Python 或 pip 会集成这样的功能,目前只是将语法正式化。
Python VSCode 支持变得更快
如果您使用 VSCode,您可能会注意到使用大量衬着程序会导致集成开发环境变慢。Mypy 的问题尤其严重,因为 mypy 命令启动缓慢,而且 VSCode 不使用守护进程模式。
在新版本中,新的官方 mypy 扩展已经可用,它使用的是 dmypy 守护进程。由于速度加快,编辑器现在可以对整个代码库进行检查,而不仅仅是当前文件。
此外,Microsft 支持 Python 的官方扩展 pylance 现在将持久化所有对第三方库执行的索引工作。这将使启动更轻松,对于大型项目来说,由于索引工作在慢速机器上可能需要一些时间,因此将带来更快速的体验。