当无法分配内存时,如何让 Python 等待?

How can I make Python wait when it cannot allocate memory?

有时,当内存不足时,Python 程序会停止并出现如下异常:

OSError: [Errno 12] Cannot allocate memory

我可以让它等到内存再次可用而不是不可恢复地死掉吗? 或者至少冻结直到用户向它发送 SIGCONT 或其他东西?

这不是我的程序,所以我不想修改它的源代码,但我认为如果我可以通过只修改最外面的调用部分来做到这一点,那还是很酷的。

谢谢!

您可以捕获 OSError 异常,但这可能无法帮助您的程序从中断处继续。

要做到这一点,您需要在 Python 和 malloc 之间插入一些代码。您可以根据此处的详细信息使用 LD_PRELOAD 执行此操作:How can I limit memory acquired with `malloc()` without also limiting stack?

我们的想法是为 malloc 实现一个包装器,它调用真正的 malloc 并在失败时等待重试。如果您不想使用 LD_PRELOAD,那么可以使用内置的插入代码构建 Python(但需要更多工作)。

您将为 LD_PRELOAD 编写的库最终将可用于几乎任何用 C 或 C++ 编写的程序。你甚至可以开源它。 :)