Python';资源';模块-负值和无法识别的RLIMIT_VMEM

Python';资源';模块-负值和无法识别的RLIMIT_VMEM,python,resources,Python,Resources,我使用Python是为了限制内存使用,方法如下: 导入资源 rsrc=resource.RLIMIT_AS 软、硬=resource.getrlimit(rsrc) resource.setrlimit(rsrc,(软,5*1024*1024))#硬限制=5GB 但是,我遇到了以下问题: 当前的硬限制是-1。这个值的含义是什么?问题是,因为它是负数,所以我无法将硬限制设置为更高的值,并且我会收到一条错误消息(ValueError:current limit Over maximum limit

我使用Python是为了限制内存使用,方法如下:

导入资源
rsrc=resource.RLIMIT_AS
软、硬=resource.getrlimit(rsrc)
resource.setrlimit(rsrc,(软,5*1024*1024))#硬限制=5GB
但是,我遇到了以下问题:

  • 当前的
    硬限制是
    -1
    。这个值的含义是什么?问题是,因为它是负数,所以我无法将硬限制设置为更高的值,并且我会收到一条错误消息(
    ValueError:current limit Over maximum limit
  • 与文档相反,
    resource
    模块没有
    RLIMIT_VMEM
    。尝试访问
    resource.RLIMIT_VMEM
    时,我收到一个错误(
    AttributeError:'module'对象没有属性'RLIMIT_VMEM'
    )。这可能是由于我的操作系统的兼容性问题造成的吗
    如果您阅读
    getrlimit()
    LinuxC调用和
    prlimit
    命令行工具的手册页,它们模糊地暗示-1是常量
    RLIM_无穷大
    的值

    您可以在Python中验证这一点

    >>> resource.RLIM_INFINITY
    -1
    
    所以,本质上,你试图设置一个无限的软极限和一个小于这个的硬极限。硬限制必须大于或等于软限制。因此,你可以做一些类似的事情,这应该会起到作用

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

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

    第2部分的答案:
    资源
    模块文档提到了这种可能性:

    此模块不尝试屏蔽平台差异-符号 此模块将无法在上为平台定义“未” 那个站台

    根据上面链接的
    bash
    ulimit
    源代码,它使用
    RLIMIT_AS
    如果未定义
    RLIMIT_VMEM


    来源:

    另外,RLIMIT_MEM和RLIMIT_AS之间有什么区别?输入单位不是字节吗?你的
    5*1024*1024
    极限不等于5MB而不是5GB吗?@Cyrille我也怀疑。。。