前几天解决了Windows下面C++调用Python,导入numpy的问题。但是现在又发现,在加载模型的时候,会报线程异常,加载不成功,信息如下 :
b'C:/Users/grake/Desktop/Crab/out/x64/Release/model.pth'
Exception ignored in: <module 'threading' from 'C:\\Python\\Python36\\lib\\threading.py'>
Traceback (most recent call last):
File "C:\Python\Python36\lib\threading.py", line 1289, in _shutdown
assert tlock.locked()
SystemError: <built-in method locked of _thread.lock object at 0x000001E5FC0847D8> returned a result with an error set
C++代码如下:
#include <iostream>
#include <thread>
#include "./python/36.8/include/Python.h"
void test()
{
wchar_t home[] = L"C:/Python/Python36";
Py_SetPythonHome(home);
Py_Initialize();
int r = Py_IsInitialized();
if (r == 0)
{
std::cout << "初始化Python环境失败" << std::endl;
Py_Finalize();
return;
}
PyObject* model = PyImport_ImportModule("algorithm");
if (model == nullptr)
{
std::cout << "加载Python文件失败" << std::endl;
PyErr_Print();
Py_Finalize();
return;
}
PyObject* dict = PyModule_GetDict(model);
if (dict == nullptr)
{
Py_DECREF(model);
std::cout << "获取符号字典失败" << std::endl;
Py_Finalize();
return;
}
PyObject* ptr = PyDict_GetItemString(dict, "load_zfmodel");
Py_DECREF(dict);
if (ptr == nullptr)
{
Py_DECREF(model);
std::cout << "获取load_zfmodel失败" << std::endl;
Py_Finalize();
return;
}
std::cout << "成功获取加载接口" << std::endl;
//Py_DECREF(ptr);
PyObject* args = PyTuple_New(1);
PyTuple_SetItem(args, 0, PyBytes_FromString("model.pth"));
PyObject* py_cv_model = PyObject_CallObject(ptr, args);
Py_DECREF(model);
Py_Finalize();
}
int main()
{
std::thread thread([]() {
test();
});
thread.join();
return 0;
}
项目紧急,哪位可以指点迷津?