c/c++调用python脚本时使用了numpy数组,第二次调用python脚本程序就崩了,也没有报错,不使用numpy就能多次调用脚本
//已经_import_array()
{PythonThreadLocker Locker; //GIL
std::shared_ptr<PyObject> pArgs(PyTuple_New(1),Py_OBJdeleter);
npy_intp dims[2]={10,10}; //定义array的shape
int ND = 2;//指明array的维度
//matrix[10][10] 已经初始化
std::shared_ptr<PyObject> pPyArray(PyArray_SimpleNewFromData(ND, dims, NPY_UBYTE, matrix)
,Py_OBJdeleter); //指明array的维度,shape,数量类型,缓冲区
if(PyTuple_SetItem(pArgs.get(), 0, pPyArray.get()))
std::cout<<"PyTuple_SetItem Error"<<std::endl;//变量转换
std::shared_ptr<PyObject> pModule(PyImport_ImportModule("todo")
,Py_OBJdeleter);
if (!pModule) {
std::cout<<"cannot open todo.py file!"<<std::endl;
PyErr_Print();
Py_Finalize();
exit(-1);
}
std::shared_ptr<PyObject> pyFunc_printList(PyObject_GetAttrString(pModule.get(), "dosomething")
,Py_OBJdeleter);//获取函数名称
if (!pyFunc_printList) {
std::cout<<"cannot access dosomething Function!"<<std::endl;
PyErr_Print();
Py_Finalize();
exit(-1);
}
PyEval_CallObject(pyFunc_printList.get(), pArgs.get());
}
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。