【问题标题】:How to re-use expensive data in a WSGI app?如何在 WSGI 应用程序中重用昂贵的数据?
【发布时间】:2018-11-07 12:04:48
【问题描述】:

我构建了一个 WSGI 页面,其中包含表格数据和来自数据库的相同数据的散点图。 (我正在使用烧瓶和 matplotlib 但这没关系)。这会生成两个单独的请求:一个用于 HTML 页面,另一个用于从标记调用的动态生成的图像。由于数据库相当慢,而且由于两个请求都需要完全相同的数据,我想只用一个 SQL 查询来完成这项工作。想到了两种方法:

  1. 在 HTML 视图函数中查询 DB 后,生成散点图并将其保存在某处的 PNG 文件中。然后将表格数据传递给模板,并在浏览器请求图像时提供缓存的 PNG。

  2. 以某种方式将图像数据嵌入 HTML 本身并让浏览器使用 Javascript 呈现它。

方法 1. 简单明了,但我还需要一种方法来在不再需要缓存图像时摆脱它们。这很容易变得混乱。由于该应用程序纯粹是 http-request 驱动的,因此我必须在每个请求上扫描我的缓存目录并确定哪个文件足够老可以删除。或者,我可以让“onload”javascript 函数第三次调用我的应用程序来触发删除图像。也许很聪明,但很健壮?

  1. 我不知道如何做到这一点,更不用说以与浏览器兼容的方式了。

有什么建议吗?

【问题讨论】:

    标签: matplotlib flask wsgi


    【解决方案1】:

    我已经在 Usenet 上工作了 25 年,但仍然发布问题是几分钟后自己找到答案的最佳方法:

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

    在视图函数中:

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

    故事结束。没有javascript。

    【讨论】:

      猜你喜欢
      • 2020-09-01
      • 2015-02-02
      • 2011-12-06
      • 2021-12-23
      • 2012-05-17
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      相关资源
      最近更新 更多