在销毁子解释器后释放GIL

时间:2011-03-20 22:15:39

标签: python python-3.x interpreter gil

我在Python C ++应用程序中嵌入Python 3.2,我有几个子解释器在程序中的不同时间运行(由Py_NewInterpreter创建)。他们在不同时间获取并释放GIL,但是当我想要销毁其中一个副解释器时,我遇到了一个问题。

要销毁子解释器,您必须获取GIL。所以我这样做:

PyEval_AcquireLock(threadstate);

然后我用

销毁解释器
Py_EndInterpreter(threadstate);

你会认为它会释放GIL,因为它的东西被破坏了。但是,Py_EndInterpreter的文档说:

  

给定的线程状态必须是   当前线程状态。见   下面讨论线程状态。   当呼叫返回时,当前   线程状态为NULL。 (全局解释器锁必须在调用此函数之前保持,并在返回时仍保持。)

因此,如果我在销毁子解释器时必须保持GIL并且销毁子解释器将其设置为NULL并且我必须拥有获取GIL的线程来释放它,如何在销毁之后释放GIL子解释?

1 个答案:

答案 0 :(得分:2)

如果在致电PyEval_ReleaseLock()后直接致电Py_EndInterpreter()会怎样?无论如何,这就是文档告诉你的事情。 :)