Python 是否在 C 绑定阻塞时释放 Global Interneter Lock?

Does Python release Global Interneter Lock when a C bindings block?

我有一些进行大量磁盘访问的 C 绑定。

C 库阻塞磁盘访问时是否释放 GIL?

C 库 运行 作为 Python 程序的一部分,正如您所建议的,可以在执行大量计算之前释放 GIL,而无需访问 Python 对象,并且这样做通过允许 I/O 在后台继续,确实会允许更多的并行性。然而,除非该库是为 Python 环境设计的,否则它可能不会,即使是也不能保证它会发布 GIL。

如果这些库不是专门为 Python 设计的,他们将不会发布 GIL。在这种情况下,您可以通过在管理 GIL 的 C 包装器中包装适当的函数来实现很多目标。

如果这些库不是专门用于 Python,或者如果 GIL 未在其文档中提及,唯一可以确定的方法是检查源代码。您的 C 代码可以使用 functions defined in Python's C API.

操作 GIL