我已经在教程中创建了一个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
有谁知道为什么会这样,以及如何解决它?
答案 0 :(得分:14)
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.py
不同的名称 - 在此示例中,我们将在settings.py
中查找celery配置:
python manage.py celery worker --app=myapp.settings
使用django-celery
时,您可以使用上述调用来启动celery,也可以按照我最初的方式执行操作,并在我的应用程序包celery.py
中创建myapp
:
from settings import celery
我的Django settings.py
包含正常的芹菜配置:
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",
)
然后像这样经营芹菜工人:
python manage.py celery worker --app=myapp
为了清楚起见,这是我的完整申请结构:
myproject/
manage.py
myapp/
__init__.py
settings.py
celery.py
答案 1 :(得分:0)
请确保您尝试从可以访问芹菜模块的目录启动芹菜工作者。在我的情况下,我试图从app目录而不是项目启动worker。