Есть ли способ ускорить время загрузки приложения matplotlib для веб-сервера (django)? - PullRequest
1 голос
/ 28 июля 2011

Я рисую некоторые красочные диаграммы рассеяния, используя matplotlib в моем приложении django для некоторых небольших наборов данных, но операторы импорта добавляют примерно 1-2 секунды ко времени выполнения по сравнению с моей предыдущей версией, которая использовала утилиту построения графиков javascript - так что теперьзагрузка страницы занимает почти 3 секунды, а не менее 1/2 секунды.Меня это беспокоит, хотя большинству людей в моем офисе это не важно.

Вот основной код:

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure

fig = Figure(figsize=[7, 7] )
canvas = FigureCanvas(fig)
ax = fig.add_axes( [1, 1, 5, 5] )
ax.scatter( x, y, c=colors, s=15, linewidth=1.5)
ax.set_xticklabels(labels, rotation=-40, horizontalalignment='left')
fig.savefig(file)

Есть ли более легкий способ загрузки рисунка - иливозможно, другой бэкэнд быстрее?

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

Другая идея состояла бы в том, чтобы создать какое-то серверное приложение, которое бывсегда работает и слушает порт для запроса, а затем отправляет обратно изображение.Тогда не нужно загружать всю библиотеку matplotlib для каждого запроса.Но это звучит как большая работа.

1 Ответ

1 голос
/ 29 июля 2011

Вы должны визуализировать изображение в отдельном виде.Это позволяет вашему браузеру начать рендеринг страницы, пока изображение (или изображения) все еще генерируются.

def view(request):
    ...
    response=django.http.HttpResponse(content_type='image/png')
    canvas.print_png(response)
    return response

(код из http://www.scipy.org/Cookbook/Matplotlib/Django)

Более того, процессы Django не должны умирать послекаждый запрос страницы. Попробуйте настроить Apache / Nginx для поддержки нескольких процессов для будущих запросов страниц. Каждый процесс должен будет выполнять операторы import при первом отображении изображения. После этого у вас должно быть ускорение.

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