2015-04-17 14 views
5

Zajmuję się tworzeniem aplikacji Flask i wykorzystaniem schematów. Planuję używać kolejek zadań selera. Próbuję zrozumieć korzyści lub powód do korzystania cośFunkcja fabryki selerów a importowanie selera

def make_celery(app): 
    celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL']) 
    celery.conf.update(app.config) 
    TaskBase = celery.Task 
    class ContextTask(TaskBase): 
     abstract = True 
     def __call__(self, *args, **kwargs): 
      with app.app_context(): 
       return TaskBase.__call__(self, *args, **kwargs) 
    celery.Task = ContextTask 
    return celery 

a następnie robi

celery = make_celery(app) 

i importowanie go na mój tasks.py versus tylko importowanie i tworzenie instancji seler w moich zadań .py jak

from celery import Celery 

app = Celery('hello', broker='amqp://[email protected]//') 
@app.task 
def mytask(): 
+0

Zaletą - która jest bardzo ważna w przypadku korzystania ze schematów - jest to, że nie musisz martwić się zbytnio o kolejność importu i importowanie okrężne. –

+0

Czy występują problemy z kontekstem aplikacji, gdy nie używasz sposobu make_celery? – user982599

Odpowiedz

2

Jeśli piszesz proste zadanie, to lepiej importować seler & ozdobić swoją funkcję.

Jeśli tworzysz złożone zadania, lepiej jest sublimować zadanie. Tutaj otrzymasz moc OOP. Możesz rozbić swój kod na małe bloki. To ułatwia testowanie kodu w jednostce. Również jeśli potrzebujesz niestandardowej konfiguracji dla wszystkich zadań, możesz mieć niestandardową klasę bazową &, którą możesz dziedziczyć po niej dla wszystkich zadań.

+0

Czy muszę martwić się o kontekst selera i kolby, gdy po prostu importuję seler i dekoruję swoje zadania? Czy seler musi mieć do niego dostęp, czy jestem w porządku, robiąc coś w stylu 'z app.context(): runtask.delay()' – user982599

+0

Nie wiem o app.context, ale nie musisz martwić się o seler w ten kontekst. – ChillarAnand