主python线程的PyThreadState*应该为NULL吗?

1 投票
1 回答
2243 浏览
提问于 2025-04-16 11:45

我有一个用Python写的程序,它会调用一个C++的库,这个库希望释放所有的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 个回答

3

回答:,它绝对不应该是 NULL(如果是,那就是个致命错误)。后来发现这是因为我链接了两个不同版本的 Python,一个是通过 boost_python 链接的,另一个是直接链接的。

小贴士:当出现奇怪的问题时,可以使用 lddotool -L 来检查你的库依赖关系;)

撰写回答