开发者社区> 问答> 正文

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

我目前有一个使用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秒,对Python的每个c++调用仍然会执行。因此,我不认为这是一个总时间的问题。例如,如果我执行“time.sleep(1)”,它会休眠一秒钟(比我的Python脚本在第一帧之后的执行时间还要长),那么我的Python脚本仍然会被执行。 有人知道为什么会这样吗?是不是因为跑的时间不均匀?因为运行第一帧需要5秒,之后的每一帧都要快得多。有没有可能是巨蟒在这段时间之后无法跟上? 这是我第一次在硬件上执行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";
}

问题来源StackOverflow 地址:/questions/59384132/c-python-not-always-executing-python-script

展开
收起
kun坤 2019-12-26 15:40:00 824 0
1 条回答
写回答
取消 提交回答
  • 我敢打赌,第一次执行将以一个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";
    }
    
    2019-12-26 15:40:06
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载