我将 Python 3.2 嵌入到 C++ 应用程序中,并且我有几个子解释器在程序中的不同时间运行(由创建Py_NewInterpreter
)。他们在不同时间获取和释放 GIL,但是当我想销毁其中一个子解释器时遇到了问题。
要销毁子解释器,您必须获得 GIL。所以我这样做:
PyEval_AcquireLock(threadstate);
然后我用
Py_EndInterpreter(threadstate);
你会认为它会释放 GIL,因为持有它的东西被摧毁了。但是,文档Py_EndInterpreter
说:
给定的线程状态必须是当前线程状态。请参阅下面的线程状态讨论。当调用返回时,当前线程状态为 NULL。(全局解释器锁必须在调用此函数之前保持,并且在它返回时仍然保持。)
因此,如果我在销毁子解释器时必须持有 GIL,并且销毁子解释器将其设置为 NULL,并且我必须让获取 GIL 的线程释放它,那么在销毁子解释器后如何释放 GIL ?