我将Python 3.2嵌入到C++应用程序中,并且我有几个子解释器在程序的不同时间运行(由Py_NewInterpreter
创建)。他们在不同的时间获取和释放GIL,但我遇到了一个问题,当我想摧毁其中一个口译员。
要摧毁一个副翻译,你必须获得GIL。所以我这样做:
PyEval_AcquireLock(threadstate);
然后我用
Py_EndInterpreter(threadstate);
你会认为它会释放吉尔,因为持有它的东西被摧毁了。然而,
Py_EndInterpreter
的文档说明:给定的线程状态必须是
当前线程状态。见
下面讨论线程状态。
当调用返回时,当前
线程状态为空。(全局解释器锁必须在调用此函数之前保持,并且在返回时仍保持。)
因此,如果我在销毁子解释器时必须持有GIL,并且销毁子解释器时必须将其设置为空,并且必须让获取GIL的线程释放它,那么在销毁子解释器后如何释放GIL?
最佳答案
如果您在呼叫后直接呼叫PyEval_ReleaseLock()
,会发生什么情况?医生告诉你无论如何都要这么做。:)
关于python - 销毁子解释器后释放GIL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5371910/