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