Как повторно использовать дорогие данные в приложении WSGI? - PullRequest
0 голосов
/ 07 ноября 2018

Я создал страницу WSGI, которая содержит как табулированные данные, так и график рассеяния тех же данных из базы данных. (Я использую колбу и matplotlib, но это не имеет значения). Это генерирует два отдельных запроса: один для HTML-страницы и один для динамически генерируемого изображения, вызываемого из тега. Поскольку база данных довольно медленная и поскольку оба запроса нуждаются в одинаковых данных, я бы хотел, чтобы эта работа работала только с одним запросом SQL. На ум приходят два подхода:

  1. После запроса БД в функции просмотра HTML, сгенерируйте диаграмму рассеяния и сохраните ее где-нибудь в файле PNG. Затем передайте табулированные данные в шаблон и подайте кешированный PNG, как только браузер запросит изображение.

  2. Каким-то образом вставьте данные изображения в сам HTML, и браузер отобразит их, используя Javascript.

Подход 1. прост и понятен, но мне также нужен способ избавиться от кэшированных изображений, когда они больше не нужны. Это может стать грязным. Поскольку приложение работает только с http-запросами, мне придется сканировать каталог кеша при каждом запросе и решать, какой файл достаточно старый, чтобы его можно было удалить. В качестве альтернативы я мог бы сделать так, чтобы функция javascript «onload» вызывала мое приложение в третий раз, чтобы вызвать удаление изображения. Может быть, умный, но надежный?

  1. Я понятия не имею, как это сделать, не говоря уже о совместимости с браузером.

Есть предложения?

1 Ответ

0 голосов
/ 07 ноября 2018

Я в Usenet уже 25 лет и до сих пор отправляю вопрос - это лучший способ найти ответ через несколько минут:

<img src="data:image/png;base64, {{imgdata}}">

и в функции просмотра:

return flask.render_template('chart_page.html', imgdata=base64.b64encode(pixbuf))

Конец истории. Нет JavaScript.

...