11

我在教程中创建了一个 django-celery 应用程序:

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

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

$ python manage.py celery worker -l info

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

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

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

$ python manage.py startapp myapp

我得到的错误是:

ImportError: No module named celery

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

4

2 回答 2

17

2014 年 4 月编辑:

Celery 文档已更新为 3.1;以下解决方案现已过时,请参阅:

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


默认情况下,celery 会搜索一个名为的模块celery.py来查找其配置。您可以让 celery 使用不同的名称,而不是在 app 参数celery.py中指定它- 在本例中,我们将在以下位置查找 celery 配置:settings.py

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

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

from settings import celery

我的 Djangosettings.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
于 2013-04-10T00:05:46.450 回答
1

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

于 2015-02-14T02:26:56.050 回答