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

标签 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 :)

最佳答案

答案:,它永远不会是NULL(如果是,那就是 fatal error )。原来这是因为我链接了两个不同版本的 python,一个通过 boost_python,另一个直接链接。

重要提示: 当有趣的事情发生时,使用 lddotool -L 检查你的库依赖 ;)

关于python - 主 python 线程的 PyThreadState* 是否应为 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4985933/

相关文章:

Java 线程和同步

python - 在线程中显示对话框

无法等待共享信号量

c - 使用 snprintf 进行字符串连接

c++ - QSql模块与多线程应用

python - Postgresql 和 Python : Selecting data (datetime) from SQL

c - 具有相同名称和类型的两个变量,在两个不同的 .c 文件中,使用 gcc 编译

2个列表之间的Python区别

python - matplotlib 在 Python 中显示空图

python - 为什么以下列表理解在 Python 中不起作用?