限制Python VM内存

时间:2009-11-19 00:05:15

标签: python memory jvm

我正在尝试找到一种限制Python VM可用内存的方法,就像Java VM中的选项“-Xmx”一样。 (我们的想法是能够使用MemoryError异常)

我不确定这个选项是否存在但是可能有一个解决方案使用操作系统的命令来“隔离”进程及其内存。

谢谢。

3 个答案:

答案 0 :(得分:34)

在Linux上我正在使用resource模块:

import resource
resource.setrlimit(resource.RLIMIT_AS, (megs * 1048576L, -1L))

答案 1 :(得分:12)

在* nix上你可以使用ulimit命令,特别是-m(最大内存大小)和-v(虚拟内存)。

答案 2 :(得分:3)

不要浪费任何时间。

相反,如果您想要使用MemoryError例外,请创建一个隔离对象构造的设计,以便您可以对其进行测试。

而不是这个

for i in range(1000000000000000000000):
    try:
        y = AnotherClass()
    except MemoryError:
        # the thing we wanted to test

考虑一下。

for i in range(1000000000000000000000):
    try:
        y = makeAnotherClass()
    except MemoryError:
        # the thing we wanted to test

这需要在您的设计中添加一个小小的内容。

class AnotherClass( object ):
    def __init__( self, *args, **kw ):
    blah blah blah

def makeAnotherClass( *args, **kw ):
    return AnotherClass( *args, **kw )

额外功能 - 从长远来看 - 被证明是一种很好的设计模式。这是一个工厂,你经常需要这样的东西。

然后,您可以将此makeAnotherClass替换为此类内容。

class Maker( object ):
    def __init__( self, count= 12 ):
        self.count= count
    def __call__( self, *args, **kw ):
        if self.count == 0:
            raise MemoryError
        self.count -= 1
        return AnotherClass( *args, **kw )
 makeAnotherClass= Maker( count=12 )

此版本将引发异常,而不必以任何模糊,不受支持,复杂或神奇的方式限制内存。