前言
最近在联调Python和Qt,本来以为已经解决了,没想到只是解决了单次运行,即同一个exe只能打开一次python脚本,二次打开的时候就会崩溃,本来以为是Python初始化和资源释放等问题造成的冲突,经过不停的看帖搜索,大概知道了是跟Python的GIL(全局解释锁)有关,但并没有完全看懂,大概记录一下,能用就行。
解决方案
新建一个.hw文件,将全局解释器锁和线程的相关操作用类封装
#ifndef PYTHREADSTATELOCK_H
#define PYTHREADSTATELOCK_H
#include <Python.h>
class PyThreadStateLock
{
public:
PyThreadStateLock(void)
{
_save = nullptr;
nStatus = 0;
nStatus = PyGILState_Check(); //检测当前线程是否拥有GIL
PyGILState_STATE gstate;
if (!nStatus)
{
gstate = PyGILState_Ensure(); //如果没有GIL,则申请获取GIL
nStatus = 1;
}
_save = PyEval_SaveThread();
PyEval_RestoreThread(_save);
}
~PyThreadStateLock(void)
{
_save = PyEval_SaveThread();
PyEval_RestoreThread(_sav