2012-04-22 9 views
9

En una secuencia de comandos de Python, quiero establecer un límite de memoria para una determinada llamada de función. Miré al how to limit heap size; sin embargo, no quiero limitar la memoria de todo el proceso en ejecución de Python, es decir, establecer el límite de memoria antes y después de la llamada a la función.Python: límite de memoria de configuración para una llamada de función particular

¿Hay alguna forma de realizar una llamada a función con una cantidad determinada de memoria, de modo que el límite de memoria no afecte a la persona que llama?

+9

Abra un nuevo proceso y limite el tamaño del almacenamiento dinámico. – JBernardo

+2

O, en teoría, también puede inspeccionar el marco actual y recursivamente construir un árbol con todos los objetos y estimar la memoria utilizada, pero no es simple. Compruebe cómo los perfiladores de memoria como guppy.heapy lo hacen. –

+5

Pero la verdadera pregunta es, ¿por qué quieres hacer eso? No hay una función integrada para esto, así que tal vez estés abordando el problema de la manera incorrecta. –

Respuesta

2

No, esto es imposible. Python no realiza un seguimiento de qué funciones son responsables de asignar memoria nueva, ni lo hace libc, por lo que no hay forma de limitar el uso de memoria con una sola función.

Para hacer esto, debería modificar Python para que use una nueva función para asignar memoria que requiere que se especifique qué función Python es responsable, para que pueda rechazar la asignación de memoria si esa función pasa de largo su limite

La única otra manera de hacer esto sería ejecutar la función en un proceso separado con memoria limitada, como dijo @JBernardo.

En cuanto a la implementación de sandboxes, ya existen implementaciones relativamente bien probadas. ¿Hay alguna razón por la que no puedas usar esos? En particular, vea PyPy's sandboxed VM y Zope sandbox.

Cuestiones relacionadas