MISE À JOUR: - Ce problème s'est résolu après un redémarrage de la machine. Pas encore en mesure de comprendre pourquoi cette erreur se produisait auparavant.
J'ai une fonction qui charge un énorme tableau numpy (~ 980 Mo) et le renvoie.
Lorsque je démarre Ipython pour la première fois et que j'appelle cette fonction, il charge le tableau dans la variable sans aucun problème.
Mais si j'exécute à nouveau la même commande, elle se termine en soulevant une "erreur de mémoire".
J'ai essayé ce qui suit,
del hugeArray
Toujours la même erreur se produisait. J'ai même essayé ce qui suit
del hugeArray
gc.collect()
gc.collect()
Initialement, gc.collect()
a renvoyé 145 et le deuxième appel a renvoyé 48. Mais même après cela, lorsque j'appelle la fonction, il soulevait toujours une erreur de mémoire.
La seule façon de charger à nouveau était de redémarrer ipython. Y a-t-il quelque chose que je peux faire pour libérer toute la mémoire dans ipython, de sorte que je n'ai pas à le redémarrer?
----------------Mise à jour
Voici la sortie de %whos
Variable Type Data/Info
------------------------------
gc module <module 'gc' (built-in)>
gr module <module 'Generate4mRamp' <...>rom 'Generate4mRamp.pyc'>
np module <module 'numpy' from '/us<...>ages/numpy/__init__.pyc'>
plt module <module 'matplotlib.pyplo<...>s/matplotlib/pyplot.pyc'>
En dehors de cela, gr est mon module contenant la fonction que j'ai utilisée pour charger le cube de données.
--------- Comment reproduire l'erreur
La fonction simple suivante est capable de reproduire l'erreur.
import numpy as np
import gc
def functionH():
cube=np.zeros((200,1024,1024))
return cube
testcube=functionH() #Runs without any issue
del testcube
testcube=functionH() # Raises Memory Error
del testcube
gc.collect()
gc.collect()
testcube=functionH() # Still Raises Memory Error
Cette erreur se produit uniquement en Ipython. En simple python (>>>) après avoir donné del testcube
, Il n'y a pas d'erreur de mémoire.
Cherchez-vous la valeur? IPython met en cache les variables de sortie comme par exemple Out[8]
, donc si vous l'examinez, il sera conservé en mémoire.
Tu peux faire %xdel testcube
pour supprimer la variable et la supprimer du cache d'IPython. Alternativement, %reset out
ou %reset array
effacera tout votre historique de sortie, ou seulement les références aux tableaux numpy.