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:
Исправлена проблема. Я неправильно работал с работником. Спасибо всем за вашу помощь.
Ответы
Ответ 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