我目前有一个使用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
我敢打赌,第一次执行将以一个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";
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。