首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在执行C代码期间,通过python中的ctype调用c函数是否会释放GIL?

在执行C代码期间,通过python中的ctype调用c函数是否会释放GIL?
EN

Stack Overflow用户
提问于 2021-04-30 17:19:04
回答 2查看 523关注 0票数 4

我想从python中调用一些c函数,以提高代码的性能。但是,我在网上找不到当我使用ctype库调用C函数时,是否发布了GIL。作为一个简单的例子:

代码语言:javascript
复制
from ctypes import *
fun = cdll.LoadLibrary("libc.so.6")
fun.sleep.argtypes = [c_uint]
fun.sleep(c_uint(5))

在调用fun.sleep期间释放了GIL吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-30 17:24:03

根据error=False) (是我的):

返回的函数原型创建使用标准C调用约定的函数。函数将在调用期间释放GIL。

此外(为了链接*FUNCTYPE和*DLL),模式,handle=None) (仍然是我的):

这个类的实例的行为类似于CDLL实例,除了Python是而不是在函数调用期间发布的之外。

因此,您的问题的答案是:是。

另外,如果fun.sleep多次被调用(比如在循环或其他地方),那么在Python和C之间为每次调用编组数据时都会“浪费”时间,在这种情况下,您可能需要考虑用C编写整个循环。

票数 5
EN

Stack Overflow用户

发布于 2021-07-24 13:55:55

如果这是在CLL文档中直接启动的话,那就太好了,但是下面这篇文章提供了一个令人信服的测试:ctypes.html

编辑:我说得太早了: CFUNCTYPE文档对于发布GIL:https://docs.python.org/3/library/ctypes.html#ctypes.CFUNCTYPE非常明确。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67338017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档