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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当C绑定阻止时,Python是否会发布Global Interneter Lock?相关的知识,希望对你有一定的参考价值。

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

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

答案

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

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

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

以上是关于当C绑定阻止时,Python是否会发布Global Interneter Lock?的主要内容,如果未能解决你的问题,请参考以下文章

对于大尺寸的输入数组,C程序崩溃(Segmentation Fault)。如何在不使用static / global / malloc的情况下阻止它?

在 Emacs 中全局覆盖键绑定

当输入验证失败时,Angularjs会阻止表单提交

on事件绑定阻止冒泡的问题

在 ForEach 循环中绑定时,如何阻止 SwiftUI TextField 失去焦点?

Python绑定;调用 C 代码和性能