gpt4 book ai didi

python - Django celery 使用 Ajax 检索任务状态

转载 作者:太空狗 更新时间:2023-10-29 22:16:34 26 4
gpt4 key购买 nike

我正在使用 celery 2.5.3 和 django celery - 2.5.5。我正在使用 mysql 作为代理。

场景如下,当用户请求我在从另一个站点获取数据的工作线程中排队作业时。这可能需要几分钟,具体取决于数据的大小。作业开始后,我们必须显示加载器图像。当工作人员完成下载数据(将采用 html 格式)时,我必须用检索到的数据替换加载程序图像。

我们使用 celery 的原因是有时脚本需要超过 30 秒才能完成并超时。

目前我正计划使用 ajax 调用来检查作业的状态,这个函数将以固定的时间间隔使用。

我问了几个问题,这就是我想出的

为了启动 worker,我使用了这段代码

def testCelery(request):
result=testadd.apply_async()
return HttpResponse(str(result.task_id))

这会将 task_id 返回给客户端并使用 ajax 向服务器发送请求以检查作业是否已完成

def getStat(request,task_id):
res = AsyncResult(task_id)
s=res.ready()
if s==True:
return HttpResponse(str(res.get()))
else:
return HttpResponse(str(s))

我不确定这是否是正确的方法,或者它在实时场景中的表现如何。

请指教。

编辑:使用 djcelery View 检查状态

好的,我已经按照布鲁诺的建议修改了我的代码,现在它看起来像

from djcelery import views as celery_views
def getStat(request,task_id):
return celery_views.is_task_successful(request, task_id)

它似乎正在工作。并且仍然使用带有 task_id 的 ajax 调用来检索状态。

最佳答案

Django-celery 已经提供了您正在寻找的 View 和 url - views.task_statusviews.is_task_successful 都将 task_id 作为参数并返回一个 json 响应具有(resp.)完整状态(包括异常和任务失败时的回溯)或只是一个 bool 标志。

例如,将以下内容添加到urls.py:

urlpatterns += patterns('djcelery.views',
url(r'^task/status/(?P<task_id>.+)/$', 'task_status',
name='task-status')
)

关于python - Django celery 使用 Ajax 检索任务状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11393248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com