我將python嵌入到C++插件中。插件在每個會話中調用python算法幾十次,每次發送算法不同的數據。到目前爲止這麼好停止嵌入式python
但現在我有一個問題: 該算法有時需要幾分鐘才能解決並返回一個解決方案,並在那段時間經常條件改變使該解決方案不相關。所以,我想要的是在任何時候停止算法的運行,並在其他數據集之後立即運行它。
下面是嵌入蟒蛇的C++代碼,我到目前爲止有:
void py_embed (void*data){
counter_thread=false;
PyObject *pName, *pModule, *pDict, *pFunc;
//To inform the interpreter about paths to Python run-time libraries
Py_SetProgramName(arg->argv[0]);
if(!gil_init){
gil_init=1;
PyEval_InitThreads();
PyEval_SaveThread();
}
PyGILState_STATE gstate = PyGILState_Ensure();
// Build the name object
pName = PyString_FromString(arg->argv[1]);
if(!pName){
textfile3<<"Can't build the object "<<endl;
}
// Load the module object
pModule = PyImport_Import(pName);
if(!pModule){
textfile3<<"Can't import the module "<<endl;
}
// pDict is a borrowed reference
pDict = PyModule_GetDict(pModule);
if(!pDict){
textfile3<<"Can't get the dict"<<endl;
}
// pFunc is also a borrowed reference
pFunc = PyDict_GetItemString(pDict, arg->argv[2]);
if(!pFunc || !PyCallable_Check(pFunc)){
textfile3<<"Can't get the function"<<endl;
}
/*Call the algorithm and treat the data that is returned from it
...
...
*/
// Clean up
Py_XDECREF(pArgs2);
Py_XDECREF(pValue2);
Py_DECREF(pModule);
Py_DECREF(pName);
PyGILState_Release(gstate);
counter_thread=true;
_endthread();
};
編輯:Python的算法是不是我的工作,我不應該改變它
可以在算法被分解成,在運行小的步驟(理想有限的時間?)你的C++代碼可能是:'while(stillNeeded)performNextStep();' –
不,算法不是我的工作,我不應該改變它 –