J'utilise Jupyter Lab et après avoir défini une variable, del et gc.collect () ne libèrent pas la mémoire.
Écrivez le code suivant dans une cellule et exécutez-le.
import numpy as np
import pandas as pd
import psutil
print(psutil.Process().memory_info().rss / 1024**2)
df = pd.DataFrame(np.arange(50000000).reshape(-1,5))
df.head()
Notez que c'est df.head () à la fin.
Dans la cellule suivante
print(psutil.Process().memory_info().rss / 1024**2)
del df
print(psutil.Process().memory_info().rss / 1024**2)
L'état de la mémoire ne s'affiche pas immédiatement, alors vérifiez-le dans la cellule suivante au cas où.
print(psutil.Process().memory_info().rss / 1024**2)
Je pensais que c'était un problème avec pandas.DataFrame, mais ce n'est pas le cas. Lorsque la sortie est affichée par la fonction Jupyter Lab à la fin de la "cellule", il semble qu'elle ne sera pas libérée même si vous supprimez une autre cellule par la suite.
Ne pas df.head () à la fin de la cellule. Imprimez si vous souhaitez l'afficher.
C'est une partie / un comportement qui vous met mal à l'aise, mais est-ce quelque chose dont vous faites attention lorsque vous commencez correctement avec Jupyter (je ne sais pas). ――J'ai pu enquêter et le confirmer à portée de main, mais la raison pour laquelle il n'est pas soumis à gc est de savoir si la référence est conservée dans la fonction d'affichage d'écran de jupyter ou autre. IPython semble en être la cause. Si le terme de recherche est une fuite de mémoire Jupyter, https://github.com/jupyter/notebook/issues/3713 apparaîtra, et il semble y avoir une explication (non vue).
Recommended Posts