javascript - Flask:服务器发送事件(SSE)流功能在处理输入时停止

标签 javascript python jquery html flask

我正在处理与 this one 非常相似的问题(从那里复制了很多代码):显示一个进度条,用于处理通过 html 表单上传的输入。

HTML:

  <script>
  function getProgress() {
    var source = new EventSource("/progress");
    source.onmessage = function(event) {
      $('.progress-bar').css('width', event.data+'%').attr('aria-valuenow', event.data);
      $('.progress-bar-label').text(event.data+'%');

      // Event source closed after hitting 100%
      if(event.data == 100){
        source.close()
      }
    }
  }
  </script>

  <body>
    <div class="container">
      ...
      <form method="POST" action="/process" enctype="multipart/form-data">
        <div class="form-group">
        ...
          <input type="file" name="file">
          <input type="submit" name="upload" onclick="getProgress()" />
        </div>
      </form>

      <div class="progress" style="width: 80%; margin: 50px;">
        <div class="progress-bar progress-bar-striped active"
          role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
          <span class="progress-bar-label">0%</span>
        </div>
      </div>
    </div>
  </body>

应用.py:


@app.route('process')
def process_inputs():
    ...
    r.set("progress", progress)
    ...


@app.route('/progress')
def progress():

  def progress_stream():
    progress = r.get("progress")
    while progress < 100:
      yield "data:" + str(progress) + "\n\n"

      time.sleep(1)

  return Response(progress_stream(), mimetype='text/event-stream')

根据我的理解,progressprocess_input 函数应该同时运行,因此 progress 可以在处理过程中更新进度条.但是,这不起作用,因为 progress 在 ``process_input` 完成之前停止。

如何让这两个函数同时运行?我认为这会由 Flask 的线程功能自动处理。

最佳答案

显然这是一个浏览器问题:Chrome 可以按预期工作,但 Firefox 却不行。看起来 Firefox 在等待 POST 请求时不处理传入的 SSE(?)

关于javascript - Flask:服务器发送事件(SSE)流功能在处理输入时停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59195668/

相关文章:

Javascript:如何根据项属性值删除数组项(JSON 对象)?

python - Python 中的 MySQL 连接器

python - 如何将 mysql 封装在 python 脚本中

javascript - 自定义Verify.js验证规则不适用

javascript - 在 Javascript 中创建数学函数的图形,该函数随着函数中变量的变化而动态变化

javascript - 过滤 HTML 表格,结果应位于 HTML 表格中

javascript - 如何缩小正则表达式验证失败的原因?

python - 如何使用一些子项目格式化 csv

javascript - JQuery Clockpicker 不触发输入上的更改事件

php - 如何在.php文件中使用jquery脚本?