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
我有一些进行大量磁盘访问的 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