当C绑定阻止时,Python是否会发布Global Interneter Lock?

问题描述 投票:0回答:1

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

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

python c binding cpython gil
1个回答
2
投票

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

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

如果这些库不是专门用于Python的,或者如果文档中没有提到GIL,那么唯一可以确定的方法是检查源代码。您的C代码可以使用functions defined in Python's C API操纵GIL。

© www.soinside.com 2019 - 2024. All rights reserved.