我想用AJAX在django中获得一些Celery任务结果。我有这样的看法:
def ajax_brand_count(request, task_id):
extra_data = brand_count.AsyncResult(task_id)
print("1", extra_data.state)
print("2", extra_data.get())
if extra_data.ready():
print("3", extra_data)
return HttpResponse('')
在打印1 上,我得到SUCCESS
在打印2 上,我得到None
在打印3 上,我得到一个= task_id
的字符串
我有Redis
个实例正在运行
我的Celery
实例正在运行SETTINGS
:
CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
在终端中,我看到该任务已成功完成。
我做错了什么?
的更新:
我正在使用Celery 3.1.25
我的task
,它返回QuerySet
,我想稍后在HTML中呈现:
@task(bind = True)
def brand_count(self, brand_ids):
queryset = Brand.objects.filter(brand_id__in=brand_ids)
queryset.annotate(amount_of_products=Count('products'))
答案 0 :(得分:0)
在您的任务定义结束时,您似乎忘记了return
任务的结果。将return queryset
添加到任务的最后,希望它一切正常!