gpt4 book ai didi

c++ - 无法停止来自 python C 扩展的 python 回调

转载 作者:行者123 更新时间:2023-11-28 03:34:21 26 4
gpt4 key购买 nike

我正在尝试将 C++ 相机帧采集库包装到 Python 中。我在回调函数方面遇到问题。我使用以下代码从 C 函数调用 python 函数:

PyGILState_STATE gstate;
gstate = PyGILState_Ensure();
result = PyObject_CallObject(my_callback, arglist);
if(result == NULL){
caller.stopLive();
}
Py_DECREF(result);
Py_DECREF(arglist);
PyGILState_Release(gstate);

回调工作正常。当我尝试使用相机库函数停止回调时出现问题。如果 python 回调函数很短,相机库函数可以停止回调,但如果 python 回调函数时间较长,相机库函数无法停止回调,程序会卡住。

有人遇到过类似的问题吗?您对尝试什么有什么建议吗?

编辑:停止回调的代码是:

static PyObject * stopcallback(PyObject *self, PyObject *args)
{
if(grabber->isListenerRegistered(pListener)){
grabber->removeListener(pListener);
while(grabber->isListenerRegistered(pListener)){
Sleep(0);
}
delete pListener;
printf("Callback stopped\n");
Py_RETURN_NONE;
}
}

我从 Python 调用这个函数。

最佳答案

你说“如果 python 回调函数很短,相机库函数能够停止回调”。

我想知道库是否无法在运行(或挂起?)时删除回调。

如果回调很短,则有一段时间没有运行(或未挂起),因此库可以将其删除,但如果回调很长,则它正在运行(或未挂起)几乎所有时间,所以图书馆没有机会将其删除。

关于c++ - 无法停止来自 python C 扩展的 python 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11523721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com