如何从python中的本机代码捕获运行时错误?
我有以下问题,让我们使用这个python函数如何从python中的本机代码捕获运行时错误?,python,python-multiprocessing,Python,Python Multiprocessing,我有以下问题,让我们使用这个python函数 def func(): run some code here which calls some native code 在func()中,我调用了一些函数,这些函数又调用了一些本机C代码。 如果发生任何崩溃,整个python进程将同时崩溃 如何捕获并从这些错误中恢复? 我想到的一种方法是在一个单独的进程中运行这个函数,但不只是启动另一个进程,因为该函数使用了大量内存和对象,因此很难拆分它。python中是否有类似于C中fork()的东西,用于
def func():
run some code here which calls some native code
在func()中,我调用了一些函数,这些函数又调用了一些本机C代码。
如果发生任何崩溃,整个python进程将同时崩溃
如何捕获并从这些错误中恢复?
我想到的一种方法是在一个单独的进程中运行这个函数,但不只是启动另一个进程,因为该函数使用了大量内存和对象,因此很难拆分它。python中是否有类似于C中fork()的东西,用于创建具有相同内存结构的相同进程的副本等
或者其他想法
更新:
在python中似乎没有捕获C运行时错误的真正方法,这些错误处于较低的级别,会使整个python虚拟机崩溃
作为解决方案,您目前有两种选择:
只要您在支持
fork
的操作系统上运行,多处理
模块就已经创建了子流程。您可以os.fork
、multiprocessing.Process
或multiprocessing.Pool
来获得您想要的。您也可以在这些系统上使用os.fork()
调用。为什么不使用try
和除了
?如果它引发异常,您应该捕获异常。如果它真的无一例外地“崩溃”,那么它就有一个严重的bug,您对此无能为力。fork
存在于python中,只要您使用支持它的柏拉图形式。Linux/Mac:Yes,Windows:No.事实上,多处理.Process
会在可能的情况下分叉。如果C代码与一堆python对象交互,可能更容易使用通用序列化格式(json、msgpack等),以便C代码将数据解压到C结构中,并消除python对象的复杂性。那么,创建一个只使用C的进程并发送数据就相对容易了。try/except不会处理底层的C运行时错误。谢谢,我已经发现os.fork提供了这个功能。