首页 > 解决方案 > 在 Flask 中使用 Celery 时无法导入名称 App

问题描述

我正在编写一个使用 Celery 运行后台任务的简单 Flask 应用程序,但是当我尝试在终端上运行该应用程序时,我收到以下错误消息:

Traceback (most recent call last):
  File "server.py", line 2, in <module>
    from flask_celery import make_celery
  File "/usr/local/lib/python2.7/site-packages/flask_celery.py", line 16, in <module>
    from celery.app import App, AppPickler, current_app as current_celery
ImportError: cannot import name App

这是我正在使用的代码:

from flask import Flask
from flask_celery import make_celery

app = Flask(__name__)
app.config["CELERY_BROKER_URL"] = "amqp://guest:guest@localhost:5672//"

celery = make_celery(app)


@celery.task(name='server.reverse')
def reverse(string):
    return string[::-1]


@app.route("/process/<name>")
def process(name):
    reverse.delay(name)
    return "I sent an async request!"


if __name__ == "__main__":
    app.run(debug=True)

有人知道我在做什么错吗?

谢谢

标签: pythonflaskcelery

解决方案


您收到错误是因为模块App未发布,请参阅代码。此外,您似乎正在使用,这不是现在如何将 Flask 与 Celery 一起使用的推荐方式:celery.appflask_celery

从 Celery 3.0 开始,不再推荐使用 Flask-Celery 集成包,您应该改用标准的 Celery API。

这是 Flask 文档中涉及与 Celery 集成的部分:

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


推荐阅读