Python 'resource' 模块 - 负值和无法识别的 RLIMIT_VMEM

标签 python resources

我正在使用Python resource module为了限制我的内存使用,通过以下方式:

import resource
rsrc = resource.RLIMIT_AS
soft, hard = resource.getrlimit(rsrc)
resource.setrlimit(rsrc, (soft, 5*1024*1024))  # hard limit = 5GB

但是,我遇到了以下问题:

  1. 当前限制为-1。这个值有什么意义呢?问题是,因为它是负数,所以我无法将硬限制设置为更高的值,并且收到一条错误消息(ValueError:当前限制超出最大限制)。
  2. 与文档相反,resource 模块没有 RLIMIT_VMEM。尝试访问 resource.RLIMIT_VMEM 时,出现错误(AttributeError: 'module' object has no attribute 'RLIMIT_VMEM')。这可能是由于我的操作系统的某些兼容性问题造成的吗?

最佳答案

如果您阅读了 getrlimit() Linux C 调用和 prlimit 命令行工具的手册页,它们会隐约暗示 -1 是值常量RLIM_INFINITY

您可以在 Python 中验证这一点。

>>> resource.RLIM_INFINITY
-1

因此,本质上您正在尝试设置 Infinity 的软限制和小于该值的硬限制。硬限制必须大于或等于软限制。因此,你可以做这样的事情,应该可以解决问题。

hard_limit = 5 * 1024 * 1024
resource.setrlimit(rsrc, (hard_limit, hard_limit))

关于你的第二个问题,我很想知道答案,这就是我提出这个问题的原因:)

关于Python 'resource' 模块 - 负值和无法识别的 RLIMIT_VMEM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25157991/

相关文章:

python - 单击按钮时如何调用两个函数?

python - 按日期拆分 DataFrame 并通过附加新记录和覆盖现有记录来重新组合

Android - ResourcesNotFoundException 试图通过资源 id 设置操作栏图标时

c++ - 如何使用 C++ 编辑可执行文件中的资源?

caching - Unity 3D : Asset Bundles vs. 资源文件夹与 www.Texture

python - python opencv 函数 cvGetMat 中无法识别或不支持的数组类型

python - 在 pywin32 中打开 MS Word 文件

python - 在 python 中映射嵌套字典

javascript - 在 JavaScript 中使用函数式编程风格管理共享资源

c# - 在 C# 项目中使用资源