Limitar la memoria de Python VM

Estoy tratando de encontrar una manera de limitar la memoria disponible para la máquina virtual de Python, como lo hace la opción “-Xmx” en la máquina virtual de Java. (La idea es poder jugar con la excepción MemoryError)

No estoy seguro de que exista esta opción, pero puede haber una solución que utilice un comando del sistema operativo para “aislar” un proceso y su memoria.

Gracias.

En * nix puede jugar con el ulimit , específicamente con -m (tamaño máximo de memoria) y -v (memoria virtual).

En Linux estoy usando el módulo de recursos :

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

No pierdas el tiempo en esto.

En cambio, si desea jugar con MemoryError excepciones de MemoryError cree un diseño que aísle la construcción del objeto para poder probarlo.

En lugar de esto

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

Considera esto.

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

Esto requiere una pequeña adición a su diseño.

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

La función adicional, a largo plazo, demuestra ser un buen patrón de diseño. Es una fábrica , y a menudo necesitas algo así.

Luego puedes reemplazar este makeAnotherClass con algo como esto.

 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 ) 

Esta versión generará una excepción sin que tenga que limitar la memoria de una manera oscura, insostenible, compleja o mágica.