【问题标题】:AttributeError: 'Flask' object has no attribute 'user_options'AttributeError:“Flask”对象没有属性“user_options”
【发布时间】:2014-11-11 03:47:38
【问题描述】:

我正在尝试从以下文档设置这个基本示例:

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

但到目前为止,我不断收到以下错误:

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

我使用的是 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

例子:

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'

【问题讨论】:

  • 请向我们展示错误的完整回溯。
  • 您需要edit您的问题才能添加。
  • 你用什么命令行来运行 Celery?你是如何配置 Celery 本身的?您只向我们展示了 Flask 集成方面。
  • 所以我正在使用“celery -A worker”来运行 celery。
  • 我没有在 celery 方面进行任何配置。我只是直接关注该文档。

标签: python flask celery


【解决方案1】:

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

celery -A your_application worker

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

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

celery -A application.celery worker

【讨论】:

  • 我遇到过很多此类问题。芹菜对我来说有点神奇。
  • 我今天遇到了同样的问题...我的问题是 app = Flask(__name__),因为它与 celery 内部 self.app 冲突。因此,您只需将app = Flask(__name__) 重命名为“应用程序”或其他名称即可避免此回溯
【解决方案2】:

这对我有用:

celery -A my_app_module_name.celery worker

【讨论】:

  • 对我来说也是如此。我用celery 4.3.0 (rhubarb)
【解决方案3】:

重命名应用flask_app 它会工作

【讨论】:

  • 这无关紧要。 OP 没有与任何 NameError 作斗争,您的回答很模糊,它如何解决问题(似乎无论如何都没有)。
【解决方案4】:

像这样:

celery -A your_application worker

your_application 所在的位置:

your_application = Flask(\__name\__)

python 文件名:your_application.py,它会工作

顺便说一句,celery v4 在 Windows 中不受支持

【讨论】:

    猜你喜欢
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 2019-09-06
    • 2020-09-18
    • 2014-12-29
    • 2020-06-25
    相关资源
    最近更新 更多