У нас есть приложение C ++ QT, в него встроен python.Мы предоставили пользователю два интерфейса: 1. Выполнить файл 2. Остановить выполнение.Мы выполняем файл python в потоке без GUI, используя PyRun_FileExFlags.Мы хотели бы прервать выполнение файла Python (предположим, что файл Python имеет бесконечный цикл, он никогда не завершает выполнение).Как прервать?
Мы попробовали следующее 1. В основном потоке установить трассировку с помощью PyEval_SetTrace 2. (если пользователь нажал на Остановить выполнение) В функции обратного вызова трассировки мы установили ошибку "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 прервется.