我正在使用芹菜2.5.3和django芹菜 - 2.5.5。我正在使用mysql作为经纪人。
这是一种场景,当用户请求我在工作中排队从另一个站点获取数据的作业时。这可能需要几分钟,具体取决于数据的大小。一旦作业开始,我们必须显示加载器图像。当工人完成下载数据(将采用html格式)时,我必须用检索到的数据替换加载器图像。
我们使用芹菜的原因是,有时脚本需要超过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调用来检索状态。
答案 0 :(得分:11)
Django-celery已经提供了你正在寻找的视图和网址 - views.task_status
和views.is_task_successful
都将task_id作为参数,并以(resp。)完整状态返回json响应(包括任务失败时的异常和回溯)或只是一个布尔标志。
例如,将以下内容添加到urls.py
:
urlpatterns += patterns('djcelery.views',
url(r'^task/status/(?P<task_id>.+)/$', 'task_status',
name='task-status')
)