我正在使用 celery 2.5.3 和 django celery - 2.5.5。我使用 mysql 作为代理。
这是场景,当用户请求我在从另一个站点获取数据的工作人员中排队工作时。这可能需要几分钟,具体取决于数据的大小。作业开始后,我们必须显示加载器图像。当工作人员完成下载数据(将是 html 格式)时,我必须用检索到的数据替换加载器图像。
我们使用 celery 的原因是有时脚本需要超过 30 秒才能完成并超时。
目前我计划使用 ajax 调用来检查作业的状态,这个函数将在固定的时间间隔使用。
我经历了几个问题,这就是我想出的
要启动工作人员,我正在使用此代码
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 视图检查状态
好的,我已经按照 bruno 的建议修改了我的代码,现在它看起来像
from djcelery import views as celery_views
def getStat(request,task_id):
return celery_views.is_task_successful(request, task_id)
它似乎正在工作。并且仍然使用带有 task_id 的 ajax 调用来检索状态。