我想从OMNET++简单模块中的C++代码调用Python函数。你知道吗
我用gdb调试了代码。它可以通过所有的线,但在最后
分段错误发生在Py_Finalize();
之后。你知道吗
我发现下面的issue on GitHub描述了相同的问题。 但这并没有帮助我解决问题。你知道吗
double result=0;
// 1) Initialise python interpretator
if (!Py_IsInitialized()) {
Py_Initialize();
//Py_AtExit(Py_Finalize);
}
// 2) Initialise python thread mechanism
if (!PyEval_ThreadsInitialized()) {
PyEval_InitThreads();
assert(PyEval_ThreadsInitialized());
}
PyGILState_STATE s = PyGILState_Ensure();
PyRun_SimpleString("import sys; sys.path.append('/home/mypath/')");
PyObject *pName = PyUnicode_DecodeFSDefault((char*)"integrationTest");
PyObject* pModule = PyImport_Import(pName);
if (pModule != NULL)
{
PyObject* pFunction = PyObject_GetAttrString(pModule, (char*)"calculateExecutionTime");
/// changement will be held in this level Args and function result.
PyObject* pArgs = PyTuple_Pack(2,PyFloat_FromDouble(2.0),PyFloat_FromDouble(8.0));
PyObject* pResult = PyObject_CallObject(pFunction, pArgs);
result = (double)PyFloat_AsDouble(pResult);
///////
}
// Clean up
PyGILState_Release(s);
Py_DECREF(pName);
Py_DECREF(pModule);
Py_Finalize();
问题发生在python解释器的第一次初始化/取消初始化之后。OmneT++模拟过程中发生的事情是初始化/取消初始化/重新初始化/。。。Python解释器。但是,Numpy不支持这一点
因此,我在initialize()方法中的模拟开始时只初始化了一次python解释器,就解决了这个问题。然后,我在析构函数中调用Py_Finalize()。你知道吗
相关问题 更多 >
编程相关推荐