python - 当 C 绑定(bind)阻塞时,Python 会释放 Global Interneter Lock 吗?

标签 python c binding cpython gil

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

当 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 .

关于python - 当 C 绑定(bind)阻塞时,Python 会释放 Global Interneter Lock 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54285612/

相关文章:

c - 排序算法和数字之间的距离

c - 是否省略了 C89(又名 ANSI C)中的 return 语句未定义行为?

c# - Mvvm wpf : update value binding before leaving focus of input element

python - 组合函数以产生所需的整数输出

python - 如何根据对象实例自定义 Django 内联管理表单

c - 确定目标文件的 BSS 大小

wpf - MVVM 命令后更新 UI 的方式是什么?

python - 如何比较 django 中不相等的邮政编码列表中的值?

python - 从 Python 中的字符串中删除所有冠词、连接词等

c# - WPF 用户控件内的绑定(bind)