【问题标题】:Rendering multiple HTML pages in Python Flask (Heroku) App在 Python Flask (Heroku) 应用程序中呈现多个 HTML 页面
【发布时间】:2017-11-18 05:48:27
【问题描述】:

我正在尝试将多个 HTML 页面提供给单个页面,然后将最后的单个页面作为 PDF 提供。我总共有 95 页,我已经使用以下堆栈实现了这一点;

  1. Python/烧瓶
  2. WeasyPrint HTML to PDF Creator
  3. Jinja 模板使用 include

    {% include 'page1.html' %}
    {% include 'page2.html' %}
    ...
    ...
    {% include 'page95.html' %}
    
  4. Heroku 部署

  5. gunicorn 和 nginx 在生产中与 Flask 一起使用

我的问题是,最终页面需要超过 80 秒才能显示为 PDF(即:包含 95 个其他 html 页面的最终 html 页面)。而 Heroku 只能维持 28-30 秒的连接。有什么方法可以加快提供最终 PDF 的过程?

多线程会对此有所帮助吗? (我可能需要阅读如何做到这一点 - 不是专家)我已经在我的应用程序中有这个

    app.run(threaded=True)

抱歉,如果我在这里使用了任何不清楚的术语。

【问题讨论】:

  • 总是一样吗?缓存结果并提供服务。或者更好的是,只做一次,而不是使用动态加载,而是将其放在静态路径中。
  • 不幸的是,每个页面都有一个动态的图像内容......所以它并不总是相同的:(
  • 是否有理由生成每个页面,将它们编译成一个页面,然后将其转换为 PDF?您不允许直接生成pdf吗?我刚刚测试了使用reportlab 直接生成PDF,它的速度要快一个数量级。
  • Reportlab PLUS 具有将 html 转换为 pdf 的功能...我将不得不将所有内容重新编写为 reportlab 格式...但这可能是唯一的方法

标签: python heroku flask jinja2 weasyprint


【解决方案1】:

在尝试了一些东西之后,我认为减少时间的最佳方法是简单地使用 Reportlab 并从单页制作 PDF。然后我将使用

pyPDF2

将所有这些单页合并为一个 PDF 文件以供下载。如果我能够成功执行,我会将其标记为答案!

【讨论】:

    猜你喜欢
    • 2020-09-17
    • 2019-12-29
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多