Comment puis-je libérer de la mémoire après avoir créé des figures matplotlib

j'ai plusieurs fonctions matlpotlib intégrées dans des tâches de django-céleri.

chaque fois que les tâches sont appelées plus de RAM est dédié à python. Avant longtemps, python prend tout le RAM.

QUESTION: Comment puis-je libérer cette mémoire?

mise à jour 2 - Une deuxième Solution:

j'ai posé une question similaire spécifiquement sur la mémoire verrouillé lorsque les erreurs matplotlib, mais j'ai eu 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 pointage dans un processus séparé dont la mémoire sera automatiquement libérée une fois le processus terminé.

les erreurs Matplotlib entraînent une fuite de mémoire. Comment puis-je libérer de la mémoire?

mise à JOUR - La Solution:

ces posts stackoverflow suggéraient que je puisse libérer la mémoire utilisée par les objets matplotlib avec les commandes suivantes:

.clf() : Matplotlib manque de mémoire en traçant dans une boucle

.close() : Python matplotlib: la mémoire n'est pas libérée lorsque la taille de la figure est spécifiée

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()
51
demandé sur Community 2011-08-18 05:28:22

1 réponses

avez-vous essayé d'exécuter votre fonction de tâche plusieurs fois (dans un pour) pour être sûr que votre fonction ne fuit pas peu importe le céleri? Assurez-vous que django.paramètre.DEBUG est défini False (l'objet connection contient toutes les requêtes dans memmory lorsque DEBUG=True).

4
répondu Nicolae Dascalu 2011-08-18 01:40:25