我正在尝试通过启动一个boost线程来创建一个多线程程序,该线程调用一个函数,该函数又调用一些python模块,但程序挂在那里,因为它获得了一些PyGILState_Ensure()锁并无限期地等待它释放。你能请告诉我这里有什么问题。
是的,实际上一个 python 模块调用我的 c++ 代码,它在单独的线程中调用另一个 python 模块,这就是为什么我认为它等待 PyGIL 释放导致死锁,所以,有没有使用补丁删除 PyGIL 的解决方案?
我正在尝试通过启动一个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。