ylab color categoryorder python performance memory-profiling

python - color - plotly layout



Averiguar cuánta memoria está siendo utilizada por un objeto en Python (6)

Esta pregunta ya tiene una respuesta aquí:

¿Cómo harías para descubrir cuánta memoria está siendo utilizada por un objeto? Sé que es posible averiguar cuánto se usa por un bloque de código, pero no por un objeto instanciado (en cualquier momento de su vida), que es lo que quiero.


Esto se debe usar con cuidado porque una anulación en los objetos __sizeof__ podría ser engañosa.

Usando bregman.suite, algunas pruebas con sys.getsizeof dan como resultado una copia de un objeto de matriz (datos) en una instancia de objeto que es más grande que el objeto mismo (mfcc).

>>> mfcc = MelFrequencyCepstrum(filepath, params) >>> data = mfcc.X[:] >>> sys.getsizeof(mfcc) 64 >>> sys.getsizeof(mfcc.X) >>>80 >>> sys.getsizeof(data) 80 >>> mfcc <bregman.features.MelFrequencyCepstrum object at 0x104ad3e90>


No tengo ninguna experiencia personal con ninguno de los siguientes, pero una simple búsqueda de un "Python [memoria] perfilador" cede:

  • PySizer, "un perfilador de memoria para Python", que se encuentra en http://pysizer.8325.org/ . Sin embargo, la página parece indicar que el proyecto no se ha actualizado durante un tiempo, y se refiere a ...

  • Heapy, "soporte [ing] de depuración y optimización con respecto a problemas relacionados con la memoria en los programas de Python", que se encuentra en http://guppy-pe.sourceforge.net/#Heapy .

Espero que ayude.


Otro enfoque es usar pickle. Vea esta respuesta a un duplicado de esta pregunta.


Para objetos grandes, puede usar un método algo crudo pero efectivo: verifique cuánta memoria ocupa su proceso Python en el sistema, luego elimine el objeto y compare.

Este método tiene muchos inconvenientes, pero le dará una estimación muy rápida para objetos muy grandes.


Prueba esto:

sys.getsizeof(object)

getsizeof() llama al método __sizeof__ del objeto y agrega una sobrecarga adicional del recolector de elementos no utilizados si el recolector de elementos no utilizados administra el objeto.

Una receta recursiva


No hay una manera fácil de averiguar el tamaño de la memoria de un objeto python . Uno de los problemas que puede encontrar es que los objetos de Python, como las listas y los dictados, pueden tener referencias a otros objetos de Python (en este caso, ¿cuál sería su tamaño? ¿El tamaño que contiene el tamaño de cada objeto o no?). Existen algunos indicadores generales y estructuras internas relacionadas con los tipos de objetos y la recolección de basura. Finalmente, algunos objetos Python tienen comportamientos no obvios. Por ejemplo, enumera el espacio de reserva para más objetos de los que tienen, la mayoría de las veces; Los dicts son incluso más complicados ya que pueden operar de diferentes maneras (tienen una implementación diferente para un número pequeño de claves y, a veces, asignan más de las entradas).

Existe una gran porción de código (y un gran fragmento actualizado de código ) para tratar de aproximarse mejor al tamaño de un objeto python en la memoria.

También es posible que desee comprobar alguna descripción anterior sobre PyObject (la estructura C interna que representa prácticamente todos los objetos Python).