繁体   English   中英

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

[英]C++ Python Not Always Executing Python Script

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

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

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

起初,我认为这是速度的问题,所以我用不同时间的“time.sleep()”调用替换了我所有的 Python 代码,而且,即使每次 C++ 调用 Python 时我睡眠 5 秒仍然总是被执行。 因此,我认为这不是总时间的问题。 例如,如果我执行“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 set\n";
    } else {
        Py_DECREF(res);
        std::cout << "Called the frame function";
    }
    Py_DECREF(pArgs);
}
else {
    std::cout << "Did not get the frame function";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM