python主线程的PyThreadState*是否预期为空? < P>我有一个Python程序,它调用一个C++库,希望释放所有的Python锁,以便其他Python线程可以运行。
使用python主线程的PyThreadState*是否预期为空? < P>我有一个Python程序,它调用一个C++库,希望释放所有的Python锁,以便其他Python线程可以运行。,python,c,multithreading,gil,Python,C,Multithreading,Gil,使用PyEval\u SaveThread和PyEval\u ReleaseThread我得到线程状态为空的错误: Fatal Python error: PyEval_SaveThread: NULL tstate 但是,较低级别的函数似乎乐于接受NULL状态: PyThreadState *s; s = PyThreadState_Swap(NULL); // (now s = 0) PyEval_ReleaseLock(); // .... PyEval_AcquireLock();
PyEval\u SaveThread
和PyEval\u ReleaseThread
我得到线程状态为空的错误:
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 :)
回答:否,它绝不意味着为
空
(如果为空,则为致命错误)。原来这是因为我链接了两个不同版本的python,一个是通过boost_python,另一个是直接链接
顶部提示:
当发生有趣的事情时,使用ldd
或otool-L
检查库依赖关系;)