如何在 UI 上以即使在切换页面后仍应显示的方式显示 celery 进度条

问题描述

我在我的 django 项目中创建了 celery-progress bar,就像点击一个按钮,进度条在 UI 上启动并且它可以工作。当我转到后一页或下一页并返回进度条页面时,进度开始,它不再显示栏,但芹菜任务仍在后台运行。即使在任务完成之前切换页面后,我也想显示进度条 UI。请建议我实现它。这是我的代码

views.py
def approval_req_func(request):
    task = go_to_sleep.delay(3)
    data = {'status': 'Success','message': 'Approved successfully','task_id':task.task_id}
    return HttpResponse(json.dumps(data),content_type="application/json")
tasks.py
@app.task(bind=True)
def go_to_sleep(self,duration):
    progress_recorder = ProgressRecorder(self)
    s = Contact.objects.all()
    for i,j in enumerate(s):
        time.sleep(duration)
        print(j)
        progress_recorder.set_progress(i+1,len(s),f'On Iteration {i}')
    return 'Done'
Html & Scripts
<button>Click to start Progress</button>
<div class='progress-wrapper'>
  <div id='progress-bar' class='progress-bar' style="background-color: #68a9ef; width: 0%;">&nbsp;</div>
</div>
<div id="progress-bar-message">Waiting for progress to start...</div>
<script>
$(document).ready(function(){
  $("button").click(function(event) {
      event.preventDefault()
      const valuesInArray = $(this).serializeArray()
      const body = {}
      valuesInArray.forEach(e => {
          body[e.name] = e.value
      });
      $.ajax({
          method: "GET",url: "{% url 'contact:approval_req_func' %}",data: body
      }).done(function (response) {
                $(function () {
                var progressUrl = "{% url 'celery_progress:task_status' 'task-id-stub' %}";
                var progressUrll = progressUrl.replace('task-id-stub',response['task_id']);
                CeleryProgressBar.initProgressBar(progressUrll);
            });
          })
          .fail(function (response) {
              console.log(response);
     })
});
})

</script>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...