【问题标题】:Django Celery application - No module named celery errorDjango Celery 应用程序 - 没有名为 celery 的模块错误
【发布时间】:2013-02-16 00:36:01
【问题描述】:

我已经创建了一个 django-celery 应用程序,如教程中所述:

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

当我在没有应用程序参数的情况下运行它时一切正常:

$ python manage.py celery worker -l info

但我根本无法使用应用程序参数启动它,如:

$ python manage.py celery worker -A myapp -l info

其中 myapp 是我创建项目时赋予应用程序的名称:

$ python manage.py startapp myapp

我得到的错误是:

ImportError: No module named celery

有谁知道为什么会发生这种情况以及如何解决?

【问题讨论】:

  • -A 参数适用于 celery 应用程序,而不适用于 Django 应用程序......目前 django-celery 不使用它们。
  • 啊,我不知道。感谢您的回答。但是那我该如何运行呢?
  • Celery 3.1 将从头开始支持 django(但不具备 django-celery 的所有功能,例如没有数据库结果后端和数据库定期任务调度程序,但您仍然可以在顶部使用 djcelery明白了)
  • 在 celery 3.1 (dev) 中使用 celery 和 django 的示例:github.com/celery/celery/tree/master/examples/django

标签: django-celery


【解决方案1】:

2014 年 4 月编辑:

Celery 文档已针对 3.1 进行了更新;以下解决方案现已过时,请参阅:

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


默认情况下,celery 会搜索名为 celery.py 的模块来查找其配置。您可以通过指定 it on the app argument 让 celery 使用与 celery.py 不同的名称 - 在此示例中,我们将在 settings.py 中查找 celery 配置:

python manage.py celery worker --app=myapp.settings

当使用django-celery 时,您可以使用上面的调用来启动 celery,或者像我最初做的那样在我的应用程序包myapp 中创建一个celery.py

from settings import celery

我的 Django settings.py 包含正常的 celery 配置:

from celery import Celery

celery = Celery(broker="amqp://guest:guest@127.0.0.1:5672//")

celery.conf.update(
    CELERY_DEFAULT_QUEUE = "myapp",
    CELERY_DEFAULT_EXCHANGE = "myapp",
    CELERY_DEFAULT_EXCHANGE_TYPE = "direct",
    CELERY_DEFAULT_ROUTING_KEY = "myapp",
)

然后像这样运行 celery worker:

python manage.py celery worker --app=myapp

为了清楚起见,这是我的完整应用程序结构:

myproject/
    manage.py
    myapp/
        __init__.py
        settings.py
        celery.py

【讨论】:

  • 我投票 +1 因为这让我意识到 celery 配置有点黑魔法,我必须小心。但是您应该编辑您的答案,因为它不一致。如果你在 settings.py 中设置 celery,为什么会有一个 celery.py 文件?或者你的意思是说你在 celery.py 中设置它?
  • 刚刚更新了答案,基于我现在有了更好的理解:) @Milimetric 我有一个 celery.py 文件,它导入 settings.py,因为这是 celery 默认寻找的。跨度>
  • 如果您的代码可以正常工作,并且它是开源的,那么链接会很棒。感谢您的编辑。
  • @Milimetric 抱歉,我没有指向特定示例的链接。我在开源项目上使用 Flask.. 你不能让上面的工作吗?
  • 不,我遇到了一些疯狂的无关问题。我在一个文件夹中有from celery import Celery 以及可能是错误的配置。这是疯狂的部分:当我尝试运行任何其他工作示例时,它会转到那个 other 文件夹并显示 ImportError: cannot import name Celery
【解决方案2】:

确保您尝试从可以访问 celery 模块的目录启动 celery worker。在我的情况下,我试图从应用程序目录而不是项目启动工作人员。

【讨论】:

    猜你喜欢
    • 2020-01-28
    • 1970-01-01
    • 2023-02-04
    • 2013-10-02
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2018-08-22
    相关资源
    最近更新 更多