主python线程的PyThreadState *是否应为NULL?

时间:2011-02-13 18:15:40

标签: python c multithreading gil

我有一个调用c ++库的python程序,希望释放所有的python锁,以便其他python线程可以运行。

使用PyEval_SaveThreadPyEval_ReleaseThread我得到线程状态为NULL的错误:

Fatal Python error: PyEval_SaveThread: NULL tstate

但是,较低级别的函数似乎很乐意接受NULL状态:

PyThreadState *s;
s = PyThreadState_Swap(NULL);
// (now s = 0)
PyEval_ReleaseLock();

// ....

PyEval_AcquireLock();
PyThreadState_Swap(s);

// everything seems to be just fine :)

1 个答案:

答案 0 :(得分:2)

答案:没有,它永远不会是NULL(如果是,这是一个致命的错误)。原来这是因为我正在连接两个不同版本的python,一个是通过boost_python,另一个是直接链接。

热门提示: 当有趣的事情发生时,使用lddotool -L检查您的库依赖项;)