启动Celery:AttributeError:'module'对象没有属性'celery'

ser*_*ach 17 python django celery django-celery

我尝试从命令行启动Celery worker服务器:

celery -A tasks worker --loglevel=info
Run Code Online (Sandbox Code Playgroud)

tasks.py中的代码:

import os
os.environ[ 'DJANGO_SETTINGS_MODULE' ] = "proj.settings"

from celery import task

@task()
def add_photos_task( lad_id ):
...
Run Code Online (Sandbox Code Playgroud)

我收到下一个错误:

Traceback (most recent call last):
  File "/usr/local/bin/celery", line 8, in <module>
    load_entry_point('celery==3.0.12', 'console_scripts', 'celery')()
  File "/usr/local/lib/python2.7/site-packages/celery-3.0.12-py2.7.egg/celery/__main__.py", line 14, in main
    main()
  File "/usr/local/lib/python2.7/site-packages/celery-3.0.12-py2.7.egg/celery/bin/celery.py", line 946, in main
    cmd.execute_from_commandline(argv)
  File "/usr/local/lib/python2.7/site-packages/celery-3.0.12-py2.7.egg/celery/bin/celery.py", line 890, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/usr/local/lib/python2.7/site-packages/celery-3.0.12-py2.7.egg/celery/bin/base.py", line 177, in execute_from_commandline
    argv = self.setup_app_from_commandline(argv)
  File "/usr/local/lib/python2.7/site-packages/celery-3.0.12-py2.7.egg/celery/bin/base.py", line 295, in setup_app_from_commandline
    self.app = self.find_app(app)
  File "/usr/local/lib/python2.7/site-packages/celery-3.0.12-py2.7.egg/celery/bin/base.py", line 313, in find_app
    return sym.celery
AttributeError: 'module' object has no attribute 'celery'
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么找不到'芹菜'属性?谢谢你的帮助.

操作系统是Linux Debian 5.

编辑.可能是线索.任何人都可以向我解释函数的下一个注释(为什么我们必须确保它在当前目录中找到模块)?

# from celery/utils/imports.py
def import_from_cwd(module, imp=None, package=None):
    """Import module, but make sure it finds modules
    located in the current directory.

    Modules located in the current directory has
    precedence over modules located in `sys.path`.
    """
    if imp is None:
        imp = importlib.import_module
    with cwd_in_path():
        return imp(module, package=package)
Run Code Online (Sandbox Code Playgroud)

ser*_*ach 21

我忘了在tasks.py中创建芹菜对象:

from celery import Celery
from celery import task  

celery = Celery('tasks', broker='amqp://guest@localhost//') #!

import os

os.environ[ 'DJANGO_SETTINGS_MODULE' ] = "proj.settings"

@task()
def add_photos_task( lad_id ):
...
Run Code Online (Sandbox Code Playgroud)

之后我们可以正常启动任务:

celery -A tasks worker --loglevel=info
Run Code Online (Sandbox Code Playgroud)


Rus*_*tem 10

Celery使用celery文件来存储你的应用程序的配置,你不能只给一个带有任务的python文件并启动芹菜.你应该定义celery文件(对于Celery> 3.0;以前它是celeryconfig.py)..

celeryd --app app.celery -l info

这个例子如何用配置文件启动celery app/celery.py

以下是芹菜文件的示例:https://github.com/Kami/libcloud-sandbox/blob/master/celeryconfig.py


kel*_*ket 8

对于由于明显不同的原因而收到相同错误消息的任何人,请注意,如果初始化文件中的任何导入失败,则您的应用程序将引发此完全模棱两可的错误,AttributeError而不是最初引起该错误的异常。