自由线程CPython已经准备进入实验阶段

2024-07-13 21:36:12 0 840

最近,py-free-threading.github.io上线了!它既是一个包含有关添加对自由线程 Python 的支持的文档的资源,也是一个用于跟踪 Python 生态系统中开源项目推出情况的状态跟踪器。我们希望并期待这两者都非常有用,状态跟踪器提供一站式服务来检查项目依赖项的支持状态

近期,py-free-threading.github.io上线了!
它既是一个包含有关添加对自由线程 Python 的支持的文档的资源,也是一个用于跟踪 Python 生态系统中开源项目推出情况的状态跟踪器。我们希望并期待这两者都非常有用,状态跟踪器提供一站式服务来检查项目依赖项的支持状态。
为什么要关心“自由线程”或“自由线程 CPython”是什么,因为这是对 CPython 的一项重大更改,允许在同一解释器中并行运行多个线程。它作为 CPython 3.13 中的一项实验性功能可用。自由线程解释器可以在禁用全局解释器锁 (GIL) 的情况下运行 - 这一功能最终是 PEP 703 - 在 CPython 中使全局解释器锁成为可选项的努力的结果。


在 CPython 中实现自由线程本身就已经是一项巨大的努力,值得专门写一系列博客文章。对于更广泛的生态系统来说,还需要做大量的工作,主要是由于两个问题:

线程安全。虽然纯 Python 代码应该可以不加改变地运行,但用其他语言编写的代码或使用 CPython C API 的代码可能不行。GIL 隐式地保护了大量线程不安全的 C、C++、Cython、Fortran 等代码 - 这可能会导致各种结果(崩溃、间歇性错误行为等)。
默认和自由线程 CPython 构建之间的 ABI 不兼容。自由线程解释器具有不同的 ABI 的结果是每个具有扩展模块的包现在都必须构建额外的 wheel。
在这两个问题中,线程安全是最棘手的问题。必须实现和维护额外的轮子构建工作并不理想,但工作本身很容易理解 - 只需要为每个带有扩展模块的项目执行即可。另一方面,线程安全更难理解、改进,甚至更难可靠地测试。由于多线程代码通常对多个线程运行和访问共享状态的时间很敏感,因此很少会出现错误。而且,难以在本地重现的崩溃或故障比总是可重现的崩溃或故障更难修复。
自由线程 CPython 成为默认的,并最终成为唯一的 CPython 版本还需要几年的时间。我们希望看到并帮助实现的是,对于 Python 3.13,许多项目将致力于兼容性并开始cp313t在 PyPI 上发布轮子(对于具有大量依赖关系的项目,可能还会发布夜间版本),以便下游用户和软件包也可以开始尝试。经过整整一年的生态系统支持成熟和 CPython 本身性能的进一步改进,我们应该对健壮性的好处和剩余的挑战有一个清晰的认识。

关于作者

MercyW2篇文章22篇回复

评论0次

要评论?请先  登录  或  注册