加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何中断嵌入在C应用程序中的python解释器

发布时间:2020-12-16 07:24:25 所属栏目:百科 来源:网络整理
导读:我们有一个C QT应用程序,我们在其中嵌入了 python. 我们为用户提供了两个接口 ??????1.执行文件 ??????2.停止执行. 我们使用PyRun_FileExFlags在非GUI线程中执行python文件. 我们想中断python文件的执行(假设python文件有一个无限循环,它永远不会完成执行).
我们有一个C QT应用程序,我们在其中嵌入了 python.
我们为用户提供了两个接口
??????1.执行文件
??????2.停止执行.
我们使用PyRun_FileExFlags在非GUI线程中执行python文件.
我们想中断python文件的执行(假设python文件有一个无限循环,它永远不会完成执行).
怎么打断?

我们试过以下
1.在使用PyEval_SetTrace的主线程集跟踪中
2.(如果用户点击Stop执行)在跟踪回调函数中我们设置错误“PyErr_SetString”

1:设置跟踪功能

PyGILState_STATE state;
state = PyGILState_Ensure();                
PyEval_SetTrace(TraceHook,NULL);
PyGILState_Release(state);

2:跟踪功能

int TraceHook(PyObject *obj,PyFrameObject *frame,int what,PyObject *arg)
{
if (b_isInterrupted)
{
PyGILState_STATE state;
state = PyGILState_Ensure();
PyErr_SetString(PyExc_KeyboardInterrupt,"Python Interrupted.");
PyGILState_Release(state);
}
return 0;
}

Python执行不会中断.
我希望python执行能够中断.

解决方法

PyEval_SetTrace仅影响当前线程.

你想要PyErr_SetInterrupt.它中断(Python认为是什么)主线程,无论调用线程(不需要打扰GIL).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读