我用的是芹菜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))
我不确定这是否是正确的方法,也不确定它在实时场景中会如何表现。
请提供建议。
编辑:使用dj芹菜视图检查状态
好的,我已经按照布鲁诺的建议修改了我的代码,现在它看起来像
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芹菜已经提供了您要查找的视图和url——views.task_status
和views.is_task_successful
都以task_id为参数,并返回一个json响应,其中(resp.)为完整状态(包括异常和任务失败时的回溯)或仅为布尔标志。
例如,在urls.py
中添加以下内容:
urlpatterns += patterns('djcelery.views',
url(r'^task/status/(?P<task_id>.+)/$', 'task_status',
name='task-status')
)