c++调用python接口失败

molhui 2018-07-27 01:21:07
最近用到C++调用python模块的接口函数,python模块包含多个接口,每次调用第一个接口都成功,调后面的全失败。流程是这样的:
1.程序启动时
初始化python环境 :Py_SetPythonHome(szValue); Py_Initialize();
导出python模块:pModule = PyImport_ImportModule("pythoninterface");
获取该模块的所有接口:m_pFunc1 = PyObject_GetAttrString(pModule, "cplusinterface1");
m_pFunc2 = PyObject_GetAttrString(pModule, "cplusinterface2");
......
以上全部成功。
2.调取接口,执行python函数
pArg = Py_BuildValue("(s)", ptxtTemp);
PyObject* pRetVal = PyEval_CallObject(m_pFunc1, pArg);
此时调取成功,接下来需要调取python接口2,
pArg2 = Py_BuildValue("(s)", ptxtTemp2);
PyObject* pRetVal2 = PyEval_CallObject(m_pFunc2, pArg2);
方法跟上面完全一样,但是pRetVal2=0,调用失败。
请教有什么解决方法,多谢各位。

ps:我的想法是,只在程序启动时初始化一次python环境,然后开始调用python多个接口,等程序退出时再调用Py_Finalize()释放python。
不知道是不是每次调用python接口时,都要初始化一次释放一次。感觉这样做了很多重复的初始化和释放。
...全文
318 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
__Init 2019-01-07
  • 打赏
  • 举报
回复
猜测是传递参数错误或者是cplusinterface1和cplusinterface2这两个函数内部有问题,可以先将函数里的内容先注释上 值留个返回值,吐过返回还是不正常就是参数传递的问题
molhui 2018-07-30
  • 打赏
  • 举报
回复
什么意思?调用每个接口都要单独开一个线程吗
tianfang 2018-07-27
  • 打赏
  • 举报
回复
做线程池保存python运行环境 ,每次调用从线程池中获得初始化好的python运行对象

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧