【问题标题】:how to notify users about progress of a computation in flask python [duplicate]如何在烧瓶python中通知用户计算的进度[重复]
【发布时间】:2019-03-25 09:11:37
【问题描述】:

我在烧瓶上提供一些计算结果。

对于复杂的,它可能需要时间,我想显示一个进度条或其他东西,告诉用户系统实际上正在做某事并且它没有被冻结。

我无法很好地估计需要多长时间。

从概念上讲,如何在运行计算时在烧瓶中实现向用户发出通知?是不是类似于流数据?

我知道这听起来很笼统,我要求我应该将其视为解决问题的建议,或者显示前端的 GET ajax 如何处理烧瓶响应的伪代码脚手架,这应该通知正在运行但尚未完成的计算的进度。

【问题讨论】:

    标签: python flask streaming computation


    【解决方案1】:

    我认为您描述的更多是结构问题,与 Flask 不完全相关。后端,在本例中为 Flask,提供一个 api,在客户端,您需要正确处理结果呈现,包括等待时间。

    假设您使用 Flask 实现并公开了一个 API,您可以通过以下方式使用 javascript 处理来自前端的调用:

    running example

    # HTML
    <div class="status" onclick="refresh()">click me</div>
    
    # JAVASCRIPT
    function refresh() {
      var status = document.querySelector('.status');
      status.textContent = "calling api";
      callAPI();
    
      function callAPI() {
        return new Promise(function (resolve, reject) {
          // Flask API call here ...
          setTimeout(function(){ resolve()}, 2000);
        });
      }
    
      callAPI().then(function(result) {
        status.textContent =  "show results";
      });
    }
    

    【讨论】:

    • 嗨@Marco,感谢您抽出宝贵时间。我已经在做类似的事情了,我的问题是对 API 的调用会启动一个可能需要一段时间的计算。我希望通知用户不仅要等待(例如,在前端使用计时器或 smtg),还要根据后端计算的进度提供对多长时间的估计。您指出这可能是一个承诺示例的结构性问题 - 它可能是一个建议通过链接承诺来通知某些东西(使用多个 then() 分解处理) - 想知道烧瓶中是否存在与“承诺”API 等效的结果?
    猜你喜欢
    • 2019-03-28
    • 2021-03-28
    • 2018-11-16
    • 2019-09-07
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多