首页 > 解决方案 > 在后台更新变量

问题描述

所以我目前正在编写一个 Flask 应用程序,而且我是 Flask 新手。正在进行一些处理,我将其外包给了一个单独的功能。由于此处理需要一些时间,我想向用户提供有关已通过多少次迭代的进度更新。到目前为止没有问题。但是,一旦我调用渲染模板,函数就会结束,我无法再更新该变量。我在想象一个 if 循环。如果该变量发生变化,则使用新变量作为输入呈现模板。但是在第一次迭代之后,if 循环会停止。目前,渲染模板渲染一个 html 函数,它只显示它接收到的变量。我想在该变量更改后立即更新它。

你们对我如何实现这个“后台更新”有什么建议吗?

干杯和感谢!

标签: pythonhtmlflask

解决方案


您需要某种持续的请求/响应周期。一旦您的应用程序将带有渲染模板的响应发送回浏览器,此连接就会关闭,并且无法发送更多数据。

为了完成你想要的,有一些事情需要发生:

  1. 长时间运行的函数需要在后台运行,因此它不会阻止应用程序其余部分的执行
  2. 必须有一种方法可以从长期运行的函数中获取状态更新
  3. 客户端(即浏览器)需要一种方式来接收状态更新

1和2可以用芹菜解决。它允许您在后台运行任务,并且任务通过侧通道发送信息以在其他地方使用。

实现 3 的最简单方法是在您的烧瓶应用程序中设置一个路由,该路由返回有关任务的信息,并使用一些 JavaScript 从浏览器定期请求它。我认为更有利的方法是使用 websockets 主动向客户端发送信息,但这有点复杂。

这只是一个粗略的大纲,但Miguel Grinberg提供了一个关于如何使用 celery 和来自 JS 的轮询来设置它的教程。


推荐阅读