如何在python进程中限制内存使用

时间:2015-05-15 21:45:36

标签: python linux memory ulimit

我在具有16GB Ram和64位操作系统的Linux机器上运行Python 2.7。我写的一个python脚本可以将太多的数据加载到内存中,这会使机器速度降低到我甚至无法再杀死进程的程度。

虽然我可以通过调用来限制记忆:

MULTIPLE_INTERVAL_SELECTION
在运行脚本之前在我的shell中

,我想在脚本本身中包含一个限制选项。在我看过的每个地方,ulimit -v 12000000 模块被称为具有与resource相同的能力。但是打电话:

ulimit
在我的脚本开头的

绝对没有。即使设置低至12000的值也从未使过程崩溃。我用import resource _, hard = resource.getrlimit(resource.RLIMIT_DATA) resource.setrlimit(resource.RLIMIT_DATA, (12000, hard)) 尝试了相同的结果,同样的结果。奇怪的是,打电话:

RLIMIT_STACK

也没有做任何事情。

我做错了什么?我无法在线找到任何实际使用示例。

编辑:对于任何好奇的人来说,使用import subprocess subprocess.call('ulimit -v 12000', shell=True) 并不起作用,因为它会创建一个(惊喜,惊喜!)新进程,该进程独立于当前python程序运行的进程。 / p>

1 个答案:

答案 0 :(得分:12)

resource.RLIMIT_VMEM是资源corresponding to ulimit -v

RLIMIT_DATA only affects brk/sbrk system calls newer memory managers tend to use mmap instead

要注意的第二件事是,ulimit / setrlimit仅影响当前流程及其未来的子女。

关于AttributeError: 'module' object has no attribute 'RLIMIT_VMEM'消息:resource module docs提到了这种可能性:

  

此模块不会尝试屏蔽平台差异 - 符号   此模块不提供未定义的平台   那个平台。

根据上面链接的bash ulimit source,如果未定义RLIMIT_AS,则会使用RLIMIT_VMEM