DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

项目需要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);
}

posted on 2023-01-30 17:15  DoubleLi  阅读(219)  评论(0)    收藏  举报