Нужна помощь в выявлении утечки памяти, связанной с matplotlib и колбой - PullRequest
1 голос
/ 12 октября 2011

Я написал небольшое веб-приложение, использующее фреймворк, который включает в себя построение графиков с помощью matplotlib.Проблема в том, что каждый раз, когда я создаю график, процесс потребляет больше памяти.

Я развернул приложение, используя mod_wsgi с файлом .wsgi, который выглядит просто так:

from yourapplication import app as application

Проблемы начинаются, когда я получаю доступ к URL, который создает сюжет.Функция создает объект плоттера, который при инициализации извлекает соответствующие данные из базы данных sqlite3 (данные состоят из около 30 целых чисел и одинакового числа объектов datetime), создает график с использованием matplotlib и возвращает объект StringIO, который затем отображается на экране.,

Это конец функции.Весь класс можно увидеть здесь

    canvas = FigureCanvas(fig)
    png_output = StringIO.StringIO()
    canvas.print_png(png_output)
    return png_output.getvalue()

Когда я посещаю сайт, создается процесс с около 25 МБ зарезервированной памяти.В первый раз, когда я создаю график, он увеличивается до 30 МБ, а затем примерно по 1 МБ каждый раз, когда я использую класс плоттера.В настройках по умолчанию использовалось 5 процессов, которые занимали слишком много памяти (до 150 МБ в течение нескольких минут, и мне разрешено только 80 МБ).

Я очень новичок во всем, что здесь происходит (веб-фреймворки, apache, базы данных), поэтому я не чувствую, что что-то может пойти не так, поэтому любые идеи высоко ценятся.Спасибо!

1 Ответ

2 голосов
/ 13 октября 2011

Выполнение этого после каждого вызова функции plot_month устраняет утечку.

import gc
gc.collect()
...