Рендеринг нескольких HTML-страниц в приложении Python Flask (Heroku)

Я пытаюсь разместить несколько HTML-страниц на одной странице, а затем передать эту последнюю единственную страницу в формате PDF. У меня всего 95 страниц, и я уже добился этого, используя следующий стек;

  1. Python/колба
  2. WeasyPrint HTML в PDF Creator
  3. Шаблоны Jinja с использованием include

    {% include 'page1.html' %}
    {% include 'page2.html' %}
    ...
    ...
    {% include 'page95.html' %}
    
  4. Развертывание Heroku

  5. gunicorn и nginx вместе с Flask в производстве

Моя проблема в том, что для отображения последней страницы в формате PDF требуется более 80 секунд (т.е. последняя html-страница, содержащая 95 других html-страниц). А Heroku может поддерживать соединение только 28-30 секунд. Можно ли как-то ускорить процесс подачи окончательного PDF-файла?

Поможет ли в этом многопоточность? (Возможно, мне придется прочитать, как это сделать - не эксперт) У меня уже есть это в моем приложении.

    app.run(threaded=True)

Извините, если я использую какие-либо неясные термины здесь.


person neutralCreep    schedule 15.06.2017    source источник
comment
Всегда ли это одно и то же? Кэшируйте результат и обслуживайте его. Или, лучше, сделайте это один раз и вместо того, чтобы использовать динамическую загрузку, поместите его в статический путь.   -  person Artyer    schedule 15.06.2017
comment
К сожалению, каждая страница имеет динамический контент изображения... так что это не всегда одно и то же :(   -  person neutralCreep    schedule 15.06.2017
comment
Есть ли причина для создания каждой страницы, компиляции их в одну и последующего преобразования в PDF? Вам не разрешено создавать PDF напрямую? Я только что протестировал создание PDF-файла напрямую с помощью reportlab, и это на порядок быстрее.   -  person Luis Orduz    schedule 16.06.2017
comment
В Reportlab PLUS есть функция преобразования html в pdf... мне придется переписать все в формат reportlab... но это может быть единственный выход   -  person neutralCreep    schedule 16.06.2017


Ответы (1)


Попробовав несколько вещей, я думаю, что лучший способ сократить время — это просто использовать Reportlab и создавать PDF из отдельных страниц. Тогда я буду использовать

pyPDF2

чтобы объединить все эти отдельные страницы в один файл PDF для загрузки. Я отмечу это как ответ, если смогу выполнить его успешно!

person neutralCreep    schedule 16.06.2017