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()
你爲什麼不從主導入應用程序? – davidism
因爲我不希望Celery依賴主應用程序中的所有東西(JINJA,模板等)。這與運行任務無關。相反,我不希望我的主應用程序依賴於配置工作人員所需的所有Celery客戶端引導程序。這對玩具應用程序來說很好,但隨着大型系統的增長,管理這些依賴關係很重要,我不理解Celery客戶端配置(調用任務)的分離以及工作人員需要的東西。 – rsb
我有一個非常大的系統,只需在芹菜模塊中導入應用程序,它工作得很好。這聽起來好像你已經談到了一個不存在的問題。如果您希望Celery應用程序使用您的Flask應用程序,則需要依賴Flask應用程序所依賴的內容。這沒什麼錯。 – davidism