2011-11-22 34 views
24

Ho combattuto la documentazione di Django/Celery per un po 'di tempo e ho bisogno di aiuto.Esempi di Django e Sedano: Attività periodiche

Mi piacerebbe essere in grado di eseguire attività periodiche utilizzando django-sedano. Ho visto su Internet (e la documentazione) diversi formati e schemi per come si dovrebbe fare per ottenere questo usando Celery ...

Qualcuno può aiutare con un esempio di base, funzionante della creazione, registrazione ed esecuzione di un compito periodico di django-sedano? In particolare, voglio sapere se dovrei scrivere un'attività che estende la classe PeriodicTask e registrarla, o se dovrei usare il decoratore @periodic_task, o se dovrei usare il decoratore @task e quindi impostare una pianificazione per il task esecuzione.

Non mi dispiace se tutti e tre i modi sono possibili, ma mi piacerebbe vedere un esempio di almeno un modo che funzioni. Apprezzo davvero il tuo aiuto.

risposta

37

Cosa c'è che non va con lo example from the docs?

from celery.task import PeriodicTask 
from clickmuncher.messaging import process_clicks 
from datetime import timedelta 


class ProcessClicksTask(PeriodicTask): 
    run_every = timedelta(minutes=30) 

    def run(self, **kwargs): 
     process_clicks() 

Si potrebbe scrivere la stessa operazione con un decoratore:

from celery.task.schedules import crontab 
from celery.task import periodic_task 

@periodic_task(run_every=crontab(minute="*/30")) 
def process_clicks(): 
    .... 

Il decorator syntax permette semplicemente di trasformare una funzione/compito esistente in un task periodico senza modificare direttamente.

Per le attività da eseguire celerybeat must be running.

+0

Grazie per la risposta. È bello sapere a cosa serve esattamente il decoratore e perché esistono due forme della stessa cosa. È corretto che io non debba registrare PeriodicTasks allora? Ho trovato questo esempio difficile da trovare nella documentazione e potrebbe fare con la semplificazione (come hai fatto sopra). Grazie ancora. –

+0

Ehi, ecco un altro esempio dei documenti: http://ask.github.com/celery/reference/celery.decorators.html Non è necessario registrare esplicitamente l'attività se si utilizza il decoratore. È abbastanza simile alle opzioni che hai registrato i tuoi template temporali e filtri in Django (https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#registering-the-tag), se sei più familiare con quello. – arie

+0

Grazie ancora per il tuo aiuto. –

Problemi correlati