C++ Python 并不总是执行 Python 脚本

C++ Python Not Always Executing Python Script

本文关键字:Python 执行 脚本 C++      更新时间:2023-10-16

我目前有一个硬件连接到使用MFC(Windows编程(框架的C++代码。基本上,硬件将图像帧传递给我的C++代码。在我的C++代码中,我使用 CPython(Python 嵌入C++(API 调用 Python 脚本来在该图像上执行模型。不过,我一直注意到图像的一些奇怪行为。

我的C++代码正在完美地执行我的 Python 脚本,直到 80-90 范围内的某个帧。在那之后,由于某种原因,我的C++代码会停止执行 Python 脚本。尽管如此,C++代码仍然正常运行 - 除了它没有执行 Python 脚本的事实(我刚刚说过(。

需要注意的是:我的 Python 脚本第一次执行需要 5 秒,但在第一帧之后执行每一帧只需要 0.02 秒(我认为是由于模型设置(。

起初,我认为这是速度问题,所以我用一个时间不同的"time.sleep(("调用替换了我所有的 Python 代码,即使我每次休眠 5 秒C++对 Python 的调用仍然总是被执行。因此,我认为这不是总时间的问题。例如,如果我做"time.sleep(1(",它休眠一秒钟(这比第一帧之后的Python脚本执行时间长(,我的Python脚本仍然总是被执行。

有谁知道为什么会发生这种情况?可能是因为运行时间不均匀吗?因为运行第一帧需要 5 秒,然后每帧运行速度明显更快。难道是Python在那段时间之后无法赶上吗?

这是我第一次在硬件上执行C++/Python,所以我也是新手。任何帮助将不胜感激!

为了了解我的代码,这里有一个片段:

if (pFuncFrame && PyCallable_Check(pFuncFrame)) {
PyObject* pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs, 0, PyUnicode_FromString("img.bmp"));
PyObject_CallObject(pFuncFrame, pArgs);
std::cout << "Called the frame function";
}
else {
std::cout << "Did not get the frame function";
}

我敢打赌,第一次执行以 Python 异常结束,直到您在第二次迭代中执行一些新的 Python 语句才会清除该异常,因此该异常会立即失败。我建议修复内存泄漏并添加一些错误处理代码以获得一些诊断(无论哪种方式都很有用(。例如(没有尝试过,因为你没有提供可编译的示例,但以下内容应该不会太远(:

if (pFuncFrame && PyCallable_Check(pFuncFrame)) {
PyObject* pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs, 0, PyUnicode_FromString("img.bmp"));
PyObject* res = PyObject_CallObject(pFuncFrame, pArgs);
if (!res) {
if (PyErr_Occurred()) PyErr_Print();
else std::cerr << "Python exception without error setn";
} else {
Py_DECREF(res);
std::cout << "Called the frame function";
}
Py_DECREF(pArgs);
}
else {
std::cout << "Did not get the frame function";
}