2015-09-05 64 views
1

我有一个使用依赖注入和芹菜瓶的应用程序。我有下面的例子,但我的主应用程序除了创建第二个Flask实例外,还需要实例化芹菜所需的所有模块。有没有更好的方法来实现这一目标?运行芹菜瓶和依赖注入

特别是:

主“前端”应用程序为什么要取决于整个芹菜“后端”堆只是配置芹菜客户端?自从前端开始执行任务以来,我想解耦这些子系统。

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() 
+0

你为什么不从主导入应用程序? – davidism

+0

因为我不希望Celery依赖主应用程序中的所有东西(JINJA,模板等)。这与运行任务无关。相反,我不希望我的主应用程序依赖于配置工作人员所需的所有Celery客户端引导程序。这对玩具应用程序来说很好,但随着大型系统的增长,管理这些依赖关系很重要,我不理解Celery客户端配置(调用任务)的分离以及工作人员需要的东西。 – rsb

+0

我有一个非常大的系统,只需在芹菜模块中导入应用程序,它工作得很好。这听起来好像你已经谈到了一个不存在的问题。如果您希望Celery应用程序使用您的Flask应用程序,则需要依赖Flask应用程序所依赖的内容。这没什么错。 – davidism

回答