项目需要C++调用python的算法,由于python算法比较耗时,因此采用在C++里启动working thread来调用python脚本,python代码里含有cv2.imread()等opencv的调用,在子线程里调用会卡死。
解决办法:
//1,主线程初始化python时,需要使能多线程:
Py_Initialize();
PyEval_InitThreads();
//2,主线程中,创建子线程之前:
Py_BEGIN_ALLOW_THREADS
// 创建子线程并执行子线程
Py_END_ALLOW_THREADS
//3,子线程中:
void workingThread()
{
PyGILState_STATE ret = PyGILState_Ensure();
// 代码逻辑,包括调用python脚本
PyGILState_Release(ret);
}