首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法停止来自python C扩展的python回调

无法停止来自python C扩展的python回调
EN

Stack Overflow用户
提问于 2012-07-17 21:38:03
回答 1查看 316关注 0票数 0

我正在尝试将一个C++摄像头帧采集库打包到Python中。我的回调函数有问题。我用下面的代码从一个C函数调用一个python函数:

代码语言:javascript
运行
复制
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回调函数花费较长时间,则摄像头库函数无法停止回调,并且程序冻结。

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

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

代码语言:javascript
运行
复制
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中调用此函数。

EN

回答 1

Stack Overflow用户

发布于 2012-07-18 03:50:54

你可以说“如果python回调函数很短,那么摄像头库函数就能够停止回调”。

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

如果回调很短,那么有一段时间它没有运行(或未挂起),所以库可以删除它,但如果回调很长,它实际上一直在运行(或挂起),所以库没有机会删除它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11523721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档