AttributeError: 'Flask' object has no attribute 'user_options'

Question:

I am trying to setup this basic example from the following doc:

http://flask.pocoo.org/docs/patterns/celery/

But so far I keep getting the below error:

AttributeError: ‘Flask’ object has no attribute ‘user_options’

I am using celery 3.1.15.

from celery import Celery

def make_celery(app):
    celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL'])
    celery.conf.update(app.config)
    TaskBase = celery.Task
    class ContextTask(TaskBase):
        abstract = True
        def __call__(self, *args, **kwargs):
            with app.app_context():
                return TaskBase.__call__(self, *args, **kwargs)
    celery.Task = ContextTask
    return celery

Example:

from flask import Flask

app = Flask(__name__)
app.config.update(
    CELERY_BROKER_URL='redis://localhost:6379',
    CELERY_RESULT_BACKEND='redis://localhost:6379'
)
celery = make_celery(app)


@celery.task()
def add_together(a, b):
    return a + b

Traceback error:

Traceback (most recent call last):
  File "/usr/local/bin/celery", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python2.7/dist-packages/celery/__main__.py", line 30, in main
    main()
  File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 81, in main
    cmd.execute_from_commandline(argv)
  File "/usr/local/lib/python2.7/dist-packages/celery/bin/celery.py", line 769, in execute_from_commandline
    super(CeleryCommand, self).execute_from_commandline(argv)))
  File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 305, in execute_from_commandline
    argv = self.setup_app_from_commandline(argv)
  File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 473, in setup_app_from_commandline
    user_preload = tuple(self.app.user_options['preload'] or ())
AttributeError: 'Flask' object has no attribute 'user_options'
Asked By: Ravdeep

||

Answers:

The Flask Celery Based Background Tasks page (http://flask.pocoo.org/docs/patterns/celery/) suggests this to start celery:

celery -A your_application worker

The your_application string has to point to your application’s package or module that creates the celery object.

Assuming the code resides in application.py, explicitly pointing to the celery object (not just the module name) avoided the error:

celery -A application.celery worker

Answered By: TomL

rename app flask_app
It will work

Answered By: nhywieza

like this:

celery -A your_application worker

where your_application stands:

your_application = Flask(__name__)

the python file name: your_application.py, it will work

By the way, celery v4 is unsupported in Windows

Answered By: user7374381

This worked for me:

celery -A my_app_module_name.celery worker
Answered By: sri
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.