【问题标题】:Django / Celery: autodiscover_tasks error: NoneType object not iterable.Django / Celery:autodiscover_tasks 错误:NoneType 对象不可迭代。
【发布时间】:2013-12-01 21:42:01
【问题描述】:

我正在设置 Django-celery(Django 1.5.5,最新版本的 celery 和 Django-celery)。 我在一个应用程序中创建了任务,并在 proj/proj 中创建了一个 celery.py,遵循http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html:

from __future__ import absolute_import

import os

from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(settings.INSTALLED_APPS, related_name='tasks')`

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

当我运行 manage.py runserer 时,我得到 TypeError: 'NoneType' object is not iterable。 使用 $ celery -A project -l info 启动 celery worker,但它只找到上面显示的调试任务,而不是我要运行的应用程序中的任务。 对于如何解决此问题的任何建议,我将不胜感激

【问题讨论】:

  • 如果您可以发布错误的实际完整回溯,那就太好了。
  • 我也有同样的问题..
  • 我让 autodiscover_tasks 返回 [] 而不是 None 在 _RACE_CONDITION (第 269 行)不确定这是否是正确的方法..
  • 您不应在模块级别评估settings.INSTALLED_APPS。前段时间在 Celery 文档中修复了这个问题,新教程示例使用:app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)。见:docs.celeryproject.org/en/latest/django/…(请注意,您可能还需要将 celery 升级到最新版本)

标签: python django celery


【解决方案1】:

我遇到了类似的问题。我认为问题在于docs/instructions/versions 已关闭/过时。

以前版本的 Celery 需要一个单独的库才能与 Django 一起工作,但从 3.1 开始不再是这种情况

虽然稍后它会提示您安装 django-celery。如果您只是安装 django-celery,默认情况下(不知道为什么),它将安装 3.0.23,并将您的 celery 降级到 3.0.24 版本。您可以使用$pip freeze查看您拥有的版本

$pip install celery==3.1

$pip install django-celery==3.1

应该有帮助

1http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

【讨论】:

    猜你喜欢
    • 2011-12-13
    • 2016-09-11
    • 2014-10-09
    • 2020-05-25
    • 1970-01-01
    • 2013-06-03
    • 2020-03-18
    • 2012-03-26
    • 2018-06-25
    相关资源
    最近更新 更多