python ctypes 多线程_c-解释Python扩展多线程

每当Python解释字节码时,当前运行的线程都会保留GIL.在设法获取GIL之前,没有其他Python线程可以运行.

当解释器调用了本机代码时,该代码具有两个与GIL有关的选项:

>它什么也做不了.

>它可以在工作时释放GIL,然后在返回Python之前重新获取它

如果本机代码大量调用了Python的运行时,则应采用选项1:除非持有GIL,否则永远不能安全地调用Python的运行时(少数例外,例如,如果没有,则进行调用以获取GIL有它).

如果本机代码完成了很多工作,而这些工作根本不涉及Python,那么您可以使用选项2:发布GIL之后,Python便可以安排另一个Python线程,从而获得一些并行性.如果您不释放GIL,则在Boost代码运行时,Python的其他线程将无法执行:这就是文档告诉您释放并重新获取GIL的原因.

如果您采用这种方式,那么在释放GIL之前或重新获取GIL之前,必须小心访问Py_ *函数.这可能意味着您必须制作数据的本地副本,因为在发布GIL时无法安全地访问Python数据类型(例如列表或字典元素).

如果在发布GIL时您的Boost代码需要回调到Python,那么您需要获取GIL,进行调用,然后释放GIL.尝试避免从不是由Python创建的线程进行此类调用,因为它们需要额外的工作才能获取GIL.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值