Python 'resource'模块 - 负值和无法识别的RLIMIT_VMEM
我正在使用Python的资源模块来限制我的内存使用,具体方法如下:
import resource
rsrc = resource.RLIMIT_AS
soft, hard = resource.getrlimit(rsrc)
resource.setrlimit(rsrc, (soft, 5*1024*1024)) # hard limit = 5GB
不过,我遇到了以下问题:
- 当前的
hard
限制是-1
。这个值是什么意思呢?问题是,因为它是负数,我无法将硬限制设置得更高,所以出现了一个错误信息(ValueError: current limit exceeds maximum limit
)。 - 与文档中说的不一样,
resource
模块没有RLIMIT_VMEM
。当我尝试访问resource.RLIMIT_VMEM
时,出现了一个错误(AttributeError: 'module' object has no attribute 'RLIMIT_VMEM'
)。这可能是因为我的操作系统存在一些兼容性问题吗?
2 个回答
1
第二部分的回答:resource
模块的文档提到了一种可能性:
这个模块并不试图掩盖不同平台之间的差异——在某个平台上未定义的符号在该平台上将无法通过这个模块使用。
根据上面链接的
bash
ulimit
源代码,如果RLIMIT_VMEM
没有定义,它会使用RLIMIT_AS
。
来源:限制内存使用?
2
如果你查看一下Linux C调用的getrlimit()
和prlimit
命令的手册,你会发现它们模糊地提到-1这个值实际上代表了一个叫RLIM_INFINITY
的常量。
你可以在Python中验证这一点。
>>> resource.RLIM_INFINITY
-1
所以,简单来说,你是想设置一个无限的软限制和一个小于这个限制的硬限制。硬限制必须大于或等于软限制。因此,你可以尝试这样做,这样应该就能解决问题。
hard_limit = 5 * 1024 * 1024
resource.setrlimit(rsrc, (hard_limit, hard_limit))
至于你的第二个问题,我也很想知道答案,这也是我来到这个问题的原因 :)