主python线程的PyThreadState*应该为NULL吗?
我有一个用Python写的程序,它会调用一个C++的库,这个库希望释放所有的Python锁,这样其他的Python线程就可以运行了。
我尝试使用 PyEval_SaveThread
和 PyEval_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 个回答
3
回答:不,它绝对不应该是 NULL
(如果是,那就是个致命错误)。后来发现这是因为我链接了两个不同版本的 Python,一个是通过 boost_python 链接的,另一个是直接链接的。
小贴士:当出现奇怪的问题时,可以使用 ldd
或 otool -L
来检查你的库依赖关系;)