python 空指针_Py_NewInterpreter后PyRun_String提示空指针

在尝试通过多线程和多Python解释器执行脚本时,遇到PyRun_String报空指针错误。主线程初始化Python并保存主解释器状态,子线程创建新解释器。在子线程中,虽然能成功建立子解释器,但在使用PyRun_String执行含有导入模块和检查返回值的脚本时出错。问题可能出在如何正确地在多线程环境中使用Py_NewInterpreter和PyRun_String。
摘要由CSDN通过智能技术生成

因为项目需求,需要建立多线程多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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值