【问题标题】:Ajax with long polling cannot display celery results on web pages长轮询的 Ajax 无法在网页上显示 celery 结果
【发布时间】:2023-04-01 09:07:01
【问题描述】:

我有一个在 Flask 上运行的网页,用户点击按钮然后给 celery 一个长时间运行的程序。 Ajax 不断轮询以检查 celery 是否有输出。如果 celery 有结果,则会在网页上显示警报。现在如果在 celery 中运行的程序很短,可以偶尔显示警报。 celery 中运行的程序如果运行时间较长,则无法显示。而现在的网页好像是:点击按钮-警报-按顺序刷新页面。

ubuntu 16.04,Chrome

芹菜部分:

@celery.task(name='app.add')
def add():
    z=getLength()
    return {'result':z}

@app.route('/addit', methods=['POST'])
def addit():
    task = add.delay()
    return jsonify({}),202,{'Location': url_for('taskstatus',task_id=task.id)}

@app.route('/status/<task_id>')
def taskstatus(task_id):
    task = add.AsyncResult(task_id)
        if 'result' in task.info:
            response['result'] = task.info['result']
    return jsonify(response)

ajax 轮询部分:

<script>
  function start_long_task() {
      $.ajax({
          type: 'POST',
          url: '/addit',
          success: function(data, status, request) {
              status_url = request.getResponseHeader('Location');
              update_progress(status_url) ;
          },
          error: function() {
              alert('Unexpected error');
          }
      });
  }
  function update_progress(status_url) {
      // send GET request to status URL
      $.getJSON(status_url, function(data) {
          if ('result' in data) {
              // show result
              alert('Result: ' + data['result']);
          }
          else {
              setTimeout(function() {
                  update_progress(status_url);
              }, 1000);
          }
      });
  }
  $(function() {
      $('#start-bg-job').click(start_long_task);
  });
</script>

实际结果可能是网页可以在 celery 完成时显示警报。但是现在不行了,请帮我解决这个问题,非常感谢!

【问题讨论】:

    标签: python ajax flask celery long-polling


    【解决方案1】:

    我发现如果flask中执行轮询的按钮和提交表单的按钮相同,则网页无法显示alert。我刚刚新建了一个按钮,专门用来启动ajax轮询,这样就成功了,网页就可以显示alert了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2014-08-24
      相关资源
      最近更新 更多