启动芹菜:属性错误:'module'对象没有属性'celery'



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

celery -A tasks worker --loglevel=info

tasks.py 中的代码:

import os
os.environ[ 'DJANGO_SETTINGS_MODULE' ] = "proj.settings"
from celery import task
@task()
def add_photos_task( lad_id ):
...

我收到下一个错误:

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'

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

操作系统是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)

我忘了在 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 ):
...

之后,我们通常可以开始任务:

celery -A tasks worker --loglevel=info

对于由于明显不同的原因收到相同错误消息的任何人,请注意,如果初始化文件中的任何导入失败,你的应用将引发这个完全不明确的AttributeError,而不是最初导致它的异常。

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

)。
芹菜 --

应用程序应用程序.芹菜 -l 信息

此示例如何使用配置文件启动芹菜app/celery.py

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

我的问题是我将celery变量放在 main 函数中:

if __name__ == '__main__':  # Remove this row
    app = Flask(__name__)
    celery = make_celery(app) 

什么时候应该放在外面。

当你运行celery -A tasks worker --loglevel=info 时,你的芹菜应用应该在模块tasks中公开。它不应该包装在函数或if语句中。

如果您在另一个文件中make_celery,则应将芹菜应用程序导入到要传递给芹菜的文件中。

尝试开始芹菜:

celeryd --config=my_app.my_config --loglevel=INFO --purge -Q my_queue

我的tasks.py中有下一个脚本:

@task(name="my_queue", routing_key="my_queue")
def add_photos_task( lad_id ):

my_config.py中有下一个脚本:

CELERY_IMPORTS = 
(
    "my_app.tasks",
)
CELERY_ROUTES = 
{
    "my_queue":
    {
        "queue": "my_queue"
    },
}
CELERY_QUEUES = 
{
    "my_queue":
    {
        "exchange": "my_app",
        "exchange_type": "direct",
        "binding_key": "my_queue"
    },
}
celery = Celery(broker='amqp://guest@localhost//')

相关内容

  • 没有找到相关文章

最新更新