芹菜并行任务错误'没有结果后端配置'

时间:2014-12-05 23:39:14

标签: django celery django-celery

运行django-celery 3.1.16,Celery 3.1.17,Django 1.4.16。尝试使用3名工作人员运行一些并行任务,并使用以下方法收集结果:

from celery import group

positions = []
jobs = group(celery_calculate_something.s(data.id) for data in a_very_big_list)
results = jobs.apply_async()
positions.extend(results.get())

任务celery_calculate_something返回一个对象以将其放入结果列表中:

app.task(ignore_result=False)
def celery_calculate_something(id):
  <do stuff>

无论我尝试什么,在结果上调用get()时总会得到相同的结果:

No result backend configured.  Please see the documentation for more information.

然而,结果后端IS已配置 - 我有许多其他任务,其中ignore_result = False快速添加到django_celery中的任务元表。这与使用group()返回的结果有关。我应该注意它没有在设置中明确设置 - 似乎django-celery已经为你自动设置了它。

我让工作人员使用以下方式收集事件:

manage.py celery worker -l info -E

和celerycam一起运行

python manage.py celerycam

检查返回的结果对象(GroupResult的一个实例)我可以看到后端attr是DisabledBackend的一个实例。这是问题吗?我误解了什么?

1 个答案:

答案 0 :(得分:0)

您没有配置结果后端,所以基本上您需要使用表来存储结果,因为您 django-celery 将其添加到中的 INSTALLED_APPS settings.py 文件,然后执行迁移(python manage.py migrate)之后打开 celery.py 文件,将后端修改为 djcelery.backends.database:DatabaseBackend 。这是一个例子

app = Celery('almanet',
 broker='amqp://guest@localhost//',
 backend='djcelery.backends.database:DatabaseBackend',
 include=['alm_crm.tasks'] #References your tasks. Donc forget to put the whole absolute path.
 )

之后您可以导入结果from celery import result现在您可以保存结果并通过job.id提取结果

from celery import group
positions = []
jobs = group(celery_calculate_something.s(data.id) for data in
a_very_big_list)
results = jobs.apply_async()
results.save()
some_task_result = result.GroupResult.restore(results.id)
print some_task_results.ready()