首页 文章

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

提问于
浏览
2

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

特别是:

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

main.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'])

tasks.py

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

我不从 main 导入 app ,因为我不希望我的主应用程序依赖于配置工作人员所需的Celery客户端的所有引导程序 . 它's fine for toy apps, but as a large system grows, managing these dependencies is important and I don't了解Celery客户端配置(调用任务)的分离以及工作人员需要什么 .

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

1 回答

相关问题