J'ai plusieurs fonctions matlpotlib intégrées dans certaines tâches django-celery.
Chaque fois que les tâches sont appelées, plus de RAM est dédiée à python. Avant longtemps, python occupe toute la mémoire vive.
QUESTION : Comment puis-je libérer ce souvenir ?
UPDATE 2 - Une deuxième solution :
J'ai posé une question similaire concernant spécifiquement la mémoire bloquée lors des erreurs de matplotlib, mais j'ai obtenu une bonne réponse à cette question .clf()
, .close()
et gc.collect()
ne sont pas nécessaires si vous utilisez multiprocess pour exécuter la fonction de traçage dans un processus séparé dont la mémoire sera automatiquement libérée une fois le processus terminé.
Les erreurs de Matplotlib entraînent une fuite de mémoire. Comment puis-je libérer cette mémoire ?
UPDATE - La solution :
Ces posts stackoverflow suggèrent que je peux libérer la mémoire utilisée par les objets matplotlib avec les commandes suivantes :
.clf()
: Matplotlib manque de mémoire lors d'un tracé en boucle
.close()
: Python matplotlib : mémoire non libérée lors de la spécification de la taille des figures
import gc
gc.collect()
Voici l'exemple que j'ai utilisé pour tester la solution :
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from pylab import import figure, savefig
import numpy as np
import gc
a = np.arange(1000000)
b = np.random.randn(1000000)
fig = plt.figure(num=1, dpi=100, facecolor='w', edgecolor='w')
fig.set_size_inches(10,7)
ax = fig.add_subplot(111)
ax.plot(a, b)
fig.clf()
plt.close()
del a, b
gc.collect()