无法在Django 1.11中获得Celery任务结果

时间:2018-04-23 12:30:47

标签: python ajax django celery

我想用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'))

1 个答案:

答案 0 :(得分:0)

在您的任务定义结束时,您似乎忘记了return任务的结果。将return queryset添加到任务的最后,希望它一切正常!