我有一个调用 c++ 库的 python 程序,它希望释放所有 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 :)
最佳答案
答案:不,它永远不会是NULL
(如果是,那就是 fatal error )。原来这是因为我链接了两个不同版本的 python,一个通过 boost_python,另一个直接链接。
重要提示:
当有趣的事情发生时,使用 ldd
或 otool -L
检查你的库依赖 ;)
关于python - 主 python 线程的 PyThreadState* 是否应为 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4985933/