使用Flask和依赖注入运行芹菜

时间:2015-09-05 06:10:30

标签: python flask celery

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

特别是:

为什么主要"前端"应用依赖于整个芹菜"后端" stack只是为了配置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()

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

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

1 个答案:

答案 0 :(得分:2)