Подтвердить что ты не робот

AttributeError: объект 'Flask' не имеет атрибута 'user_options'

Итак, я пытаюсь установить этот базовый пример из следующего документа:

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

Но до сих пор я получаю следующую ошибку:

AttributeError: объект "Flask" не имеет атрибута "user_options"

Я использую сельдерей 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

Пример:

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 (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'

UPDATE: Исправлена ​​проблема. Я неправильно работал с работником. Спасибо всем за вашу помощь.

4b9b3361

Ответ 1

Я вижу обновление, что исходный вопрос был решен, но я не вижу точного решения. Для других, которые сталкиваются с этой ошибкой, вот еще информация.

Страница "Задачи фона на основе сельдерея на флаконах" (http://flask.pocoo.org/docs/0.10/patterns/celery/) предлагает начать сельдерей:

celery -A your_application worker

Строка your_application должна указывать на ваш пакет приложений или модуль, который создает объект celery.

Предполагая, что код находится в приложении application.py, явное указание на объект celery (а не только имя модуля) избегает ошибки:

celery -A application.celery worker

Ответ 2

переименовать приложение flask_app Он будет работать

Ответ 3

вот так:

celery -A your_application worker

где указано ваше приложение:

your_application = Flask(\__name\__)

имя файла python: your_application.py, он будет работать

Кстати, сельдерей v4 не поддерживается в Windows