我使用Cython来连接外部C函数。该函数(具有100k代码行的科学代码)在内部检查无效条件和"退出"如果它们发生。
当外部函数退出"时,如何让Cython检测并引发异常?而不是"返回"?
编辑: user2864740是对的,cython实际退出。 (我在python mulitprocessing.Process中运行该函数。为了简化我摆脱了多处理。)现在的问题是:
如何阻止"退出()"从外部库调用以退出Cython(或稍后的Python)。 try-except结构并不能解决这个问题。这可以被视为例外,而不是整个过程死亡吗?
谢谢!
答案 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异常。