[Django]-Starting Celery: AttributeError: 'module' object has no attribute 'celery'

31👍

I forgot to create a celery object in 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 ):
...

After that we could normally start tasks:

celery -A tasks worker --loglevel=info

19👍

For anyone who is getting the same error message for an apparently different reason, note that if any of the imports in your initialization file fail, your app will raise this totally ambiguous AttributeError rather than the exception that initially caused it.

12👍

Celery uses celery file for storing configuration of your app, you can’t just give a python file with tasks and start celery.
You should define celery file ( for Celery>3.0; previously it was celeryconfig.py)..

celeryd –app app.celery -l info

This example how to start celery with config file at app/celery.py

Here is example of celery file: https://github.com/Kami/libcloud-sandbox/blob/master/celeryconfig.py

👤Rustem

3👍

My problem was that I put the celery variable inside a main function:

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

when it should be put outside.

👤Philip

2👍

When you run celery -A tasks worker --loglevel=info, your celery app should be exposed in the module tasks. It shouldn’t be wrapped in a function or an if statements that.

If you make_celery in another file, you should import the celery app in to your the file you are passing to celery.

1👍

Try start celery:

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

There is next script in my tasks.py:

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

There is next script in 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//')

Leave a comment