如何让 boost.python 代码知道 python 异常?

例如,

int test_for(){
  for(;;){
  }
  return 0;
}

如果我将其导出到 python,则不会在 Ctrl-C 上中断。我认为其他异常(exception)
不会以这种方式工作。

这是一个玩具示例。我真正的问题是我有一个可能需要数小时才能计算的 C 函数。我想打断它,例如,如果需要更多那个小时。但我不想杀死 python 实例,在函数内被调用。

提前致谢。

最佳答案

在您的 C 或 C++ 代码中,为 SIGINT 安装一个信号处理程序,该处理程序设置一个全局标志,并让长时间运行的函数定期检查该标志,并在设置标志时尽早返回。或者,您可以使用 Python C API 引发 Python 异常,而不是提前返回:请参阅 PyErr_SetInterrupt here

关于c++ - Boost.Python 和 Python 异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1008343/

10-12 16:48
查看更多