python - descargar - jupyter r
lista de uso de memoria en ipython y jupyter (1)
Tengo unos pocos (casi diez) Gb de memoria tomados por el kernel ipython. Creo que esto proviene de objetos grandes (matrices, listas, matrices numpy, ...) que podría haber producido durante alguna operación y ahora ya no necesito más.
Me gustaría enumerar todos los objetos que he definido y ordenarlos por su huella de memoria. ¿Hay una manera simple de hacer eso? Para ciertos tipos, existe el método nbytes
, pero no para todos ... así que estoy buscando una forma general de enumerar todos los objetos que he creado y su ocupación de memoria.
Suponiendo que está usando ipython
o jupyter
, tendrá que hacer un poco de trabajo para obtener una lista de todos los objetos que ha definido. Eso significa tomar todo lo disponible en globals()
y filtrar objetos que son modules
, elementos builtins
, ipython objects
, etc. Una vez que esté seguro de que tiene esos objetos, puede proceder a capturar sus tamaños con sys.getsizeof
. Esto se puede resumir de la siguiente manera:
import sys
# These are the usual ipython objects, including this one you are creating
ipython_vars = [''In'', ''Out'', ''exit'', ''quit'', ''get_ipython'', ''ipython_vars'']
# Get a sorted list of the objects and their sizes
sorted([(x, sys.getsizeof(globals().get(x))) for x in dir() if not x.startswith(''_'') and x not in sys.modules and x not in ipython_vars], key=lambda x: x[1], reverse=True)
Tenga en cuenta que para los objetos de Python (aquellos creados con funciones incorporadas de python), sys.getsizeof
será muy preciso. Pero puede ser un poco inexacto en los objetos creados con bibliotecas de terceros. Además, tenga en cuenta que sys.getsizeof
agrega una sobrecarga adicional al recolector de basura si el objeto es administrado por el recolector de basura. Entonces, algunas cosas pueden parecer un poco más pesadas de lo que realmente son.
Como nota al numpy
, el método .nbytes
puede ser un tanto engañoso, ya que no incluye la memoria consumida por los atributos que no son elementos del objeto de matriz.
Espero que esto ayude.