2015-09-05 2 views
1

У меня есть приложение Flask, в котором используется инъекция зависимости и сельдерей. У меня есть пример, который работает ниже, но мое основное приложение должно создать все модули, необходимые для сельдерея, а также создать второй экземпляр Flask. Есть ли лучший способ достичь этого?Бегущий сельдерей с колбой и инъекцией зависимостей

В частности:

Почему «интерфейс» приложение Main должно зависеть от всего сельдерея «бэкенд» стек просто настроить клиент сельдерей? Я бы хотел разделить эти подсистемы, так как интерфейс просто запускает задачи.

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

Потому что я не хочу, чтобы сельдерей зависел от всего материала (JINJA, шаблонов и т. Д.), Который находится в главном приложении. Это не имеет ничего общего с выполняемыми задачами. И наоборот, я не хочу, чтобы мое основное приложение зависело от всего бутстрапа клиента Celery, который необходим для настройки рабочего. Это прекрасно для игрушечных приложений, но по мере роста большой системы управление этими зависимостями очень важно, и я не понимаю разделения клиентской конфигурации Celery (для вызова задач) и того, что необходимо для рабочего. – rsb

+0

У меня очень большая система, которая просто импортирует приложение в модуль сельдерея, и он работает отлично. По-моему, вы говорите себе, что проблема не существует. Если вы хотите, чтобы приложение Celery использовало ваше приложение Flask, вам нужно будет зависеть от того, от чего зависит приложение Flask. В этом нет ничего плохого. – davidism

ответ

Смежные вопросы