我正在尝试找到一种限制Python VM可用内存的方法,就像Java VM中的选项“-Xmx”一样。 (我们的想法是能够使用MemoryError异常)
我不确定这个选项是否存在但是可能有一个解决方案使用操作系统的命令来“隔离”进程及其内存。
谢谢。
答案 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 )
此版本将引发异常,而不必以任何模糊,不受支持,复杂或神奇的方式限制内存。