因为项目需求,需要建立多线程多python解释器,也就是每个线程中都要生成一个python解释器执行python脚本。
在查询资料后,我想着在主线程中初始化python并获取python主解释器状态信息,然后在每个子线程中生成python解释器,在将子解释器的状态信息交换到全局解释器状态信息中,这样就能执行python脚本。
简易代码如下:
主线程中,其中mainState是全局PyTheadState指针
Py_Initialize();
PyEval_InitThread();
*mainState = PyEval_SaveThread();
子线程中
PyEval_AcquireLock();// 获取全局锁
PyThreadState *subState = Py_NewInterpreter(); // 建立子解释器
PyEval_ReleaseLock();
...
PyEval_AcquireThread(subState);
PyRun_SimpleString(script); // script是脚本语句
PyEval_ReleaseThead(subState);
测试正常运行,但是实际中需要将C++类导出到Python中并且有些python语句需要检查返回值,我将子线程中的代码做一些修改
PyEval_AcquireLock();// 获取全局锁
PyThreadState *subState = Py_NewInterpreter(); // 建立子解释器
PyEval_ReleaseLock();
...
PyEval_AcquireThread(subState);
PyObject *subObject = Py