【问题标题】:celery parallel tasking error 'no result backend configured'芹菜并行任务错误“未配置结果后端”
【发布时间】:2015-02-04 05:53:46
【问题描述】:

运行 django-celery 3.1.16、Celery 3.1.17、Django 1.4.16。尝试使用 3 个 worker 运行一些并行任务并使用以下命令收集结果:

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.

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

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

manage.py celery worker -l info -E

和 celerycam 一起运行

python manage.py celerycam

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

【问题讨论】:

    标签: django celery django-celery


    【解决方案1】:

    你没有配置结果后端,所以基本上你需要表来存储结果,因为你有 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 2016-06-03
      • 1970-01-01
      相关资源
      最近更新 更多