AttributeError:'Flask'对象没有属性'user_options'

Rav*_*eep 39 python celery flask

我正在尝试从以下doc中设置此基本示例:

http://flask.pocoo.org/docs/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
Run Code Online (Sandbox Code Playgroud)

例:

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
Run Code Online (Sandbox Code Playgroud)

回溯错误:

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'
Run Code Online (Sandbox Code Playgroud)

Tom*_*omL 85

基于Flask Celery的后台任务页面(http://flask.pocoo.org/docs/patterns/celery/)建议启动芹菜:

celery -A your_application worker

your_application字符串必须指向创建celery对象的应用程序包或模块.

假设代码驻留在application.py中,显式指向celery对象(而不仅仅是模块名称)避免了错误:

celery -A application.celery worker

  • 我遇到过很多这类问题.芹菜对我的口味有点神奇. (7认同)
  • 我今天遇到了同样的问题……我的问题是“ app = Flask(__ name__)”,因为它与芹菜内部的“ self.app”冲突。因此,您只需要将“ app = Flask(__ name__)”重命名为“ application”或其他名称即可避免这种追溯 (4认同)

sri*_*sri 5

这对我有用:

celery -A my_app_module_name.celery worker
Run Code Online (Sandbox Code Playgroud)