Medir consumo de memoria

lasizoillo lasizoillo en gmail.com
Mar Sep 30 15:03:56 CEST 2008


Buenas:

2008/9/30 Oswaldo Hernández <listas en soft-com.es>:
> Hola,
>
> Tengo una docena de clases en las que en algun momento pueden haber unas
> 50.000 o mas instancias en memoria, por lo que tengo dudas sobre el consumo
> de memoria de las mismas y por lo tanto si deberia replantearme el diseño.
>
> ¿Hay alguna formula o funcion que diga la memoria que consume un objeto?,
> por ejemplo una lista con 50.000 enteros.
>

En principio no hay forma. Cosa que es una jodienda y por lo que
alguien abrió un ticket:
http://bugs.python.org/issue2898
Ese ticket parece que ha sido escuchado y aparece en la lista de
cambios de la version 2.6:
http://docs.python.org/dev/whatsnew/2.6.html
(busca getsizeof() dentro de la pagina)

Hay gente que ya se las tuvo que ver con ese problema y se busco las
habichuelas:
http://bytes.com/forum/thread757255.html
El codigo aparece horrible, quiza ese mismo hilo en otra web aparezca fetén.

Quiza, aun yendo a ciegas, te interese probar el uso de __slot__:
http://mypythonnotes.wordpress.com/2008/09/04/__slots__/
Basicamente, mediante el uso de __slot__ en tus clases eliminas el
overhead de un diccionario por clase, junto con la posibilidad de
crear propiedades dinamicamente en dicha clase. Menos memoria y menos
funcionalidad, no todo sale gratis :-(

Tienes un interesante articulo sobre una prueba de uso de __slot__ en
el objeto Deferred de twisted:
http://twistedmatrix.com/pipermail/twisted-python/2008-May/017724.html
dan algunas estimaciones de memoria antes y despues de su uso. Espero
que te puedan orientar en tu problema.

Espero que te sea de ayuda y un saludo:

Javi
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es