代码之家  ›  专栏  ›  技术社区  ›  amirouche

当C绑定块时,python是否释放全局interneter锁?

  •  0
  • amirouche  · 技术社区  · 7 年前

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

    当C库阻塞磁盘访问时,是否释放了gil?

    1 回复  |  直到 7 年前
        1
  •  2
  •   holdenweb    7 年前

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

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

    如果库不是专门针对Python的,或者文档中没有提到gil,那么确保这一点的唯一方法就是检查源代码。您的C代码可以使用 functions defined in Python's C API .