[英]Boost.Python and Python exceptions
如何使 boost.python 代码 python 异常感知?
例如,
int test_for(){
for(;;){
}
return 0;
}
如果我将它导出到 python,则不会在 Ctrl-C 上中断。我认为其他异常不会以这种方式工作。
这是一个玩具示例。 我真正的问题是我有一个 C function 可能需要几个小时来计算。 我想打断它,例如,如果它需要更多的时间。 但我不想杀死python实例,在function内被调用。
提前致谢。
在您的 C 或 C++ 代码中,为 SIGINT 安装一个设置全局标志的信号处理程序,并让您长期运行的 function 定期检查该标志并在设置标志时提前返回。 或者,您可以使用 Python Python C API 引发 Python 异常,而不是提前返回:请参阅此处的 PyErr_SetInterrupt。
我不确定 boost.python 是否有解决方案 - 您可能需要自己处理。 在这种情况下,它与传统的信号处理没有什么不同。 简单的解决方案是拥有一个由信号处理程序更改的全局变量,并定期检查该变量。 另一种解决方案是使用 setjmp/longjmp,但我认为第一种方法在适用时最好,因为它简单且更易于维护。
请注意,这是特定于 unix 的——我不知道它在 windows 上是如何工作的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.