Python:为特定函数调用设置内存限制

Python:为特定函数调用设置内存限制,python,memory,process,heap,Python,Memory,Process,Heap,在Python脚本中,我想为某个函数调用设置内存限制。我看了看;但是,我不想限制整个正在运行的Python进程的内存——即在函数调用之前和之后设置内存限制 有没有办法在给定的内存量下进行函数调用,这样内存限制就不会影响调用者?没有,这是不可能的。Python不跟踪哪些函数负责分配新内存,libc也不跟踪,因此无法仅通过单个函数限制内存使用 为了做到这一点,您必须修改Python,以便使用一个新函数来分配内存,该函数需要指定Python函数的职责,以便在该函数超出其限制时,它可以拒绝内存分配 要做

在Python脚本中,我想为某个函数调用设置内存限制。我看了看;但是,我不想限制整个正在运行的Python进程的内存——即在函数调用之前和之后设置内存限制


有没有办法在给定的内存量下进行函数调用,这样内存限制就不会影响调用者?

没有,这是不可能的。Python不跟踪哪些函数负责分配新内存,libc也不跟踪,因此无法仅通过单个函数限制内存使用

为了做到这一点,您必须修改Python,以便使用一个新函数来分配内存,该函数需要指定Python函数的职责,以便在该函数超出其限制时,它可以拒绝内存分配

要做到这一点,唯一的其他方法实际上是在单独的进程中使用有限的内存执行函数,正如@JBernardo所说的


至于实现沙盒,已经有了相对经过良好测试的实现。你有什么理由不能用这些吗?具体请参见PyPy和。

打开一个新进程并限制堆大小。或者,理论上,您也可以检查当前帧,递归地构建一个包含所有对象的树,并估计所使用的内存,但这并不简单。检查一下像guppy.heapy这样的内存分析器是如何做到的。但真正的问题是,为什么要这样做?这方面没有内置功能,因此可能您处理问题的方式不对。我正在构建一个Python沙盒,我想设置一个内存限制,以免用户提交耗尽服务器内存的代码。除非您对接受的内容非常严格,否则用户可以做各种讨厌的事情,即使是在一种通常表现良好的语言(如Python)中。我认为在这种情况下,内存使用不是最大的担忧。。。