用烧瓶和依赖注入运行芹菜

问题描述 投票:2回答:1

我有一个使用依赖注入和芹菜的Flask应用程序。我在下面的示例中工作,但我的主应用程序除了创建第二个Flask实例外,还必须实例化celery所需的所有模块。有没有更好的方法来实现这一目标?

特别是:

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

卖弄.朋友

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

celery.朋友

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

tasks.朋友

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

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

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

python flask celery
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.