2015-04-17 15 views
5

Sto sviluppando un'applicazione Flask e facendo leva su progetti. Ho intenzione di utilizzare le code dei task di sedani. Sto cercando di capire il beneficio o motivo di usare qualcosa comeFunzione fabbrica di sedano e importazione di sedano

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 

e poi facendo

celery = make_celery(app) 

e l'importazione nel mio tasks.py contro solo l'importazione e la creazione di un sedano casi nei miei compiti .py come

from celery import Celery 

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

Il vantaggio, che è molto importante se si utilizzano i progetti, è che non è necessario preoccuparsi troppo dell'ordine di importazione e delle importazioni circolari. –

+0

Ci sono problemi con il contesto dell'applicazione quando non si utilizza il modo make_celery? – user982599

risposta

2

se si sta scrivendo un compito semplice, è meglio importare sedano & decorare la vostra funzione.

Se si stanno creando alcune attività complesse, è meglio sublocassare Task. Qui otterrai il potere di OOP. Puoi spezzare il tuo codice in piccoli blocchi. Ciò rende più facile testare il codice dell'unità. Inoltre, se desideri una configurazione personalizzata per tutte le tue attività, puoi avere una baseclass personalizzata & che puoi ereditare da essa per tutte le attività.

+0

Devo preoccuparmi del contenuto di sedano e di Flask quando si importa semplicemente il sedano e si decorano le mie attività? Il sedano deve avere accesso ad esso o sto bene solo facendo qualcosa come 'con app.context(): runtask.delay()' – user982599

+0

non so su app.context, ma non devi preoccuparti di sedano in quel contesto. – ChillarAnand