python - 使用 Flask 和依赖注入(inject)运行 Celery

标签 python flask celery

我有一个使用依赖注入(inject)和 celery 的 Flask 应用程序。我有下面的示例,但除了创建第二个 Flask 实例之外,我的主应用程序还必须实例化 celery 所需的所有模块。有没有更好的方法来实现这一点?

特别是:

为什么主“前端”应用程序应该依赖整个 Celery“后端”堆栈来配置 Celery 客户端?我想解耦这些子系统,因为前端只是启动任务。

主要.py

import tasks.py
app = Flask(__name__)
FlaskInjector(app=app, modules=[A, B, C, D, E, F])

celery .py

app = Flask(__name__)
injector = Injector(modules=[A, B])
FlaskInjector(app=app, injector=injector)
celery = Celery(app.import_name, include=['tasks'])

任务.py

from celery import celery, injector
@celery.task
def my_task():
    injector.get(A).foo()

我不从 main 导入 app 因为我不希望 Celery 依赖主应用程序中与运行无关的所有内容任务。相反,我不希望我的主应用程序依赖于配置工作人员所需的 Celery 客户端的所有 Bootstrap 。这对于玩具应用程序来说很好,但随着大型系统的增长,管理这些依赖关系很重要,我不明白 Celery 客户端配置(调用任务)的分离以及工作人员需要什么。

我有一个前端 Flask 应用程序和一个后端 Celery 应用程序。 Celery 应用程序具有我不希望 Flask 依赖的业务逻辑。它很大,很复杂,而且经常变化。我不想让 Flask 应用程序膨胀,每次 Celery 更改时都重新部署它,或者让我的 Flask 开发人员接触 Celery 代码。但据我所知,任务的 Flask 调用不能与它们的 Celery 实现分离。

最佳答案

关于python - 使用 Flask 和依赖注入(inject)运行 Celery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32410078/

相关文章:

python - 位置参数之前的 argparse 可选参数

python - 如何使用 jsonpickle 排除序列化的特定字段?

celery 失去 worker

singleton - celery :任务单例?

python - 我的背包代码输出错误?

python - 索引列表的并集

python - 如何将绘图标题中带有下划线的字符串设置为斜体

python - 在 Flask 中捕获 http 状态代码

python - 在Python3.6上运行的Flask找不到htmlentitydefs?

python - 让 zmq 服务器在 Django 中永远运行?