我在Linux机器上运行Python2.7,内存为16 OS,操作系统为64位。我写的一个python脚本可能会将过多的数据加载到内存中,这会使机器变慢,以至于我甚至不能再终止进程。
而我可以通过调用以下命令来限制内存:
ulimit -v 12000000
在运行脚本之前,我希望在脚本本身中包含一个限制选项。在我看过的所有地方,resource
模块都被认为具有与ulimit
相同的功能。但呼唤:
import resource
_, hard = resource.getrlimit(resource.RLIMIT_DATA)
resource.setrlimit(resource.RLIMIT_DATA, (12000, hard))
在我的脚本一开始,什么也不做。即使将该值设置为12000,也不会导致进程崩溃。我用RLIMIT_STACK
做了同样的尝试,也得到了同样的结果。奇怪的是,我在呼唤:
import subprocess
subprocess.call('ulimit -v 12000', shell=True)
也不做任何事情。
我做错了什么?我在网上找不到任何实际的用法示例。
编辑:对于任何好奇的人来说,使用subprocess.call
是行不通的,因为它创造了一个(惊喜,惊喜!)新进程,它独立于当前运行python程序的进程。
发布于 2015-05-16 07:02:56
resource.RLIMIT_VMEM
为资源corresponding to ulimit -v
。
RLIMIT_DATA
only affects brk/sbrk
system calls while 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
。
https://stackoverflow.com/questions/30269238
复制相似问题