如何识别boost.python代码python异常?

例如,

int test_for(){
  for(;;){
  }
  return 0;
}
如果我将它导出到python,

不会在Ctrl-C上中断。我认为其他例外情况 不会以这种方式工作。

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

提前致谢。

有帮助吗?

解决方案

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

其他提示

我不确定boost.python是否有解决方案 - 您可能需要自己处理。在这种情况下,它与传统的信号处理没有什么不同。简单的解决方案是有一个由信号处理程序改变的全局变量,并且定期检查此变量。另一种解决方案是使用setjmp / longjmp,但我认为第一种方法在适用时最好,因为它简单且更易于维护。

请注意,这是特定于unix的 - 我不知道它在Windows上是如何工作的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top