Как я могу освободить память после создания фигур Matplotlib - PullRequest
56 голосов
/ 18 августа 2011

У меня есть несколько функций matlpotlib, включенных в некоторые задачи django-celery.

Каждый раз, когда задачи вызываются, больше памяти выделяется для python.Вскоре python занимает всю оперативную память.

ВОПРОС: Как освободить эту память?

ОБНОВЛЕНИЕ 2 - Второе решение:

Я задал аналогичный вопрос, в частности, о блокировке памяти при ошибках matplotlib, но я получил хороший ответ на этот вопрос .clf(), .close() и gc.collect() не нужны, есливы используете многопроцессорность для запуска функции построения в отдельном процессе, память которого будет автоматически освобождена после завершения процесса.

Ошибки Matplotlib приводят к утечке памяти.Как я могу освободить эту память?

ОБНОВЛЕНИЕ - Решение:

В этих сообщениях stackoverflow предложено освободить память, используемую объектами matplotlib с помощьюследующие команды:

.clf(): Matplotlib не хватает памяти при построении в цикле

.close(): Python matplotlib: память не освобождается приуказание размера фигуры

import gc
gc.collect()

Вот пример, который я использовал для проверки решения:

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()

1 Ответ

4 голосов
/ 18 августа 2011

Вы пытались запустить функцию задачи несколько раз (в течение), чтобы убедиться, что ваша функция не течет, независимо от сельдерея?Убедитесь, что для django.settings.DEBUG установлено значение False (объект подключения хранит все запросы в памяти, когда DEBUG = True).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...