【发布时间】:2009-11-19 00:05:15
【问题描述】:
我正试图找到一种方法来限制 Python VM 的可用内存,就像 Java VM 中的选项“-Xmx”一样。 (想法是能够玩MemoryError异常)
我不确定此选项是否存在,但可能存在使用操作系统命令“隔离”进程及其内存的解决方案。
谢谢。
【问题讨论】:
我正试图找到一种方法来限制 Python VM 的可用内存,就像 Java VM 中的选项“-Xmx”一样。 (想法是能够玩MemoryError异常)
我不确定此选项是否存在,但可能存在使用操作系统命令“隔离”进程及其内存的解决方案。
谢谢。
【问题讨论】:
在 Linux 上,我使用的是 resource 模块:
import resource
resource.setrlimit(resource.RLIMIT_AS, (megs * 1048576L, -1L))
【讨论】:
在 *nix 上,您可以使用 ulimit 命令,特别是 -m(最大内存大小)和 -v(虚拟内存)。
【讨论】:
不要在这上面浪费任何时间。
相反,如果您想使用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 )
此版本将引发异常,而您不必以任何晦涩、不支持、复杂或神奇的方式限制内存。
【讨论】: