cython / python:如何捕获异常外部函数“退出”而不是“返回”

时间:2014-08-02 07:03:37

标签: python cython

我使用Cython来连接外部C函数。该函数(具有100k代码行的科学代码)在内部检查无效条件和"退出"如果它们发生。

当外部函数退出"时,如何让Cython检测并引发异常?而不是"返回"?

编辑: user2864740是对的,cython实际退出。 (我在python mulitprocessing.Process中运行该函数。为了简化我摆脱了多处理。)现在的问题是:

如何阻止"退出()"从外部库调用以退出Cython(或稍后的Python)。 try-except结构并不能解决这个问题。这可以被视为例外,而不是整个过程死亡吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

multiprocessing文档中有“加入僵尸进程”的指南。 https://docs.python.org/3/library/multiprocessing.html#programming-guidelines 如果在主进程中发现工作进程已不存在,则可以引发异常。

或者,您可以尝试在Cython代码中注册atexit处理程序 http://linux.die.net/man/3/atexit

第三个想法是使用某种LD_PRELOAD库来覆盖exit函数,以便它引发Python异常。