C++中带有嵌入式python模块的多线程

Multithreading in C++ with embedded python modules

本文关键字:模块 多线程 python 嵌入式 C++      更新时间:2023-10-16

我试图通过启动一个boost线程来创建一个多线程程序,该线程调用一个函数,该函数又调用一些python模块,但该程序在获取一些PyGILState_Ensure()锁并等待其无限期释放时挂起。你能告诉我这里出了什么问题吗。

是的,实际上一个python模块调用了我的c++代码,该代码在单独的线程中调用了另一个python模块,这就是为什么我认为它在等待PyGIL发布,这会导致死锁,那么,使用删除PyGIL的补丁有什么解决方案吗?

Python解释器不是可重入的,需要在调用它时锁定解释器(请参见例如。http://dabeaz.blogspot.be/2011/08/inside-look-at-gil-removal-patch-of.html)。在您的特定情况下,解释器上似乎已经有另一个Python调用在运行,并且它持有GIL。