如何从 python 中的本机代码捕获运行时错误?
How to catch runtime errors from native code in python?
我有以下问题,让我们使用这个 python 函数
def func():
run some code here which calls some native code
在 func() 内部,我调用了一些函数,这些函数又调用了一些本机 C 代码。
如果发生任何崩溃,整个 python 进程都会崩溃。
如何捕获此类错误并从中恢复?
我想到的一种方法是 运行 这个函数在一个单独的进程中,但不只是启动另一个进程,因为函数使用了很多内存和对象,很难拆分它。在 python 中是否有类似 C 中的 fork() 之类的东西来创建具有相同内存结构等的完全相同进程的副本?
或者其他想法?
更新:
似乎没有真正的方法来捕获 python 中的 C 运行time 错误,这些错误处于较低级别并使整个 Python 虚拟机崩溃。
作为解决方案,您目前有两个选择:
使用 os.fork() 但只能在 unix 中工作,例如 OS env.
使用多处理和共享内存模型在进程之间共享大对象。通常的序列化将不适用于内存中有几千兆字节的对象(你只会 运行 内存不足)。然而,有一个非常好的 python 库称为 Ray (https://docs.ray.io/en/master/),它使用共享内存模型执行内存中大对象序列化,它是 BigData/ML 工作负载的理想选择 - 强烈推荐。
只要您 运行 在支持 fork
的操作系统上,multiprocessing
模块就已经是这样创建子进程的了。您可以 os.fork
、multiprocessing.Process
或 multiprocessing.Pool
来获得您想要的。您还可以在这些系统上使用 os.fork()
调用。
我有以下问题,让我们使用这个 python 函数
def func():
run some code here which calls some native code
在 func() 内部,我调用了一些函数,这些函数又调用了一些本机 C 代码。 如果发生任何崩溃,整个 python 进程都会崩溃。
如何捕获此类错误并从中恢复? 我想到的一种方法是 运行 这个函数在一个单独的进程中,但不只是启动另一个进程,因为函数使用了很多内存和对象,很难拆分它。在 python 中是否有类似 C 中的 fork() 之类的东西来创建具有相同内存结构等的完全相同进程的副本?
或者其他想法?
更新: 似乎没有真正的方法来捕获 python 中的 C 运行time 错误,这些错误处于较低级别并使整个 Python 虚拟机崩溃。
作为解决方案,您目前有两个选择:
使用 os.fork() 但只能在 unix 中工作,例如 OS env.
使用多处理和共享内存模型在进程之间共享大对象。通常的序列化将不适用于内存中有几千兆字节的对象(你只会 运行 内存不足)。然而,有一个非常好的 python 库称为 Ray (https://docs.ray.io/en/master/),它使用共享内存模型执行内存中大对象序列化,它是 BigData/ML 工作负载的理想选择 - 强烈推荐。
只要您 运行 在支持 fork
的操作系统上,multiprocessing
模块就已经是这样创建子进程的了。您可以 os.fork
、multiprocessing.Process
或 multiprocessing.Pool
来获得您想要的。您还可以在这些系统上使用 os.fork()
调用。