【问题标题】:Celery worker not starting: "Module 'proj' has no attribute 'celery'"芹菜工人没有开始:“模块'proj'没有属性'芹菜'”
【发布时间】:2021-09-23 12:11:33
【问题描述】:

我正在使用 Django、Celery 和 RabbitMQ。当我从顶级目录运行celery -A FlakeFinder worker -l INFO 时,我得到了错误:

Usage: celery [OPTIONS] COMMAND [ARGS]...

Error: Invalid value for '-A' / '--app': 
Unable to load celery application.
Module 'flakefinder' has no attribute 'celery'

如果我改为运行 celery -A FlakeFinder.celeryApp worker -l INFO,我会收到紫色文本中的此错误:

ModuleNotFoundError: No module named 'celery.backends.amqp'

我不确定从这里去哪里。如何让 celery worker 运行?

我的文件夹结构如下:

. (FlakeFinder)
├── FlakeFinder
│   ├── __init__.py
│   ├── asgi.py
│   ├── celeryApp.py
│   ├── secrets.py
│   ├── settings.py
│   ├── tasks.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── license.txt
├── manage.py
├── scraping
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   ├── models.py
│   ├── scraper.py
│   ├── tests.py
│   └── views.py

celeryApp.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from celery.schedules import crontab  # scheduler

# default django settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'FlakeFinder.settings')

app = Celery('FlakeFinder')
app.conf.timezone = 'UTC'
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()

app.conf.beat_schedule = {
    # executes every 1 minute
    'scraping-task-three-hr': {
        'task': 'scraping.tasks',
        'schedule': crontab()
    }
}

tasks.py

from scraping.scraper import *
from celeryApp import app


@app.task
def update_snow_locs():
    ...

【问题讨论】:

标签: python django rabbitmq celery


【解决方案1】:

我不知道如何解决这个问题。我通过降级到版本 4.4.2 解决了这个问题。

【讨论】:

    【解决方案2】:

    尝试将“celeryApp.py”的名称更改为“celery.py”

    【讨论】:

    • 此评论建议不要将其命名为 celery.py。我曾经将它作为 celery.py 使用,但它仍然无法正常工作。 stackoverflow.com/a/43038088/1917407
    • 在我的示例项目中,如果我将包含应用程序的文件的名称更改为“celery.py”以外的任何名称,我需要将“import celery”添加到__init__.py 文件中。我不清楚为什么需要这样做!
    • 我改回 celery.py 还是不行
    【解决方案3】:

    错误似乎很明显。

    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 ):
    ...
    

    这是我在网上找到的解释-“忘记在tasks.py中创建芹菜对象” 但不代表我是 Celery Module 方面的专家。

    【讨论】:

    • 这并没有解决问题。没有 celery 模块“任务”,即使没有,添加 broker kward 或 os.environ 行也没有做到。
    • 好吧,我仔细看了看,发现 Calery 从版本 5x 中删除了任务,也许降级到版本可能会使其工作。 pip3 install celery==4.4.2
    猜你喜欢
    • 2012-11-13
    • 2021-12-24
    • 2020-01-01
    • 2015-12-08
    • 2016-07-12
    • 2019-02-12
    • 2019-02-02
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多