Comment puis-je libérer de la mémoire après la création de matplotlib chiffres
J'ai plusieurs matlpotlib fonctions roulé dans certains django-céleri tâches.
Chaque fois que les tâches sont appelés de plus de RAM est consacré à python. Avant trop longtemps, le python est de prendre de la RAM.
QUESTION: Comment puis-je libérer cette mémoire?
Mise à JOUR 2 - UNE Deuxième Solution:
J'ai posé une question similaire, précisément à propos de la mémoire verrouillée lorsque matplotlib erreurs, mais j'ai eu une bonne réponse à cette question .clf()
, .close()
, et gc.collect()
ne sont pas nécessaires si vous utilisez multi process pour exécuter la fonction de traçage dans un processus distinct, dont la mémoire sera automatiquement libéré une fois que le processus se termine.
Matplotlib erreurs suite à une fuite de mémoire. Comment puis-je libérer de la mémoire?
Mise à JOUR - La Solution:
Ces stackoverflow postes a suggéré que je peux libérer la mémoire utilisée par matplotlib objets avec les commandes suivantes:
.clf()
: Matplotlib est à court de mémoire lors de la représentation dans une boucle
.close()
: Python matplotlib: la mémoire n'est pas libérée lors de la spécification de la figure de la taille
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()
- Merci. gc.collect() fonctionne pour moi
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé de vous lancer à la tâche de fonction à plusieurs reprises (dans un) pour être sûr de ne pas fonctionner, de fuite pas question de céleri?
Assurez-vous que django.les paramètres.Le DÉBOGAGE est défini sur False( L'objet de connexion détient toutes les requêtes dans memmory quand DEBUG=True).