2011-11-22 17 views
24

He estado luchando contra la documentación de Django/Apio desde hace un tiempo y necesito ayuda.Ejemplos de Django y apio: tareas periódicas

Me gustaría poder ejecutar tareas periódicas usando django-apio. He visto en Internet (y en la documentación) varios formatos y esquemas diferentes de cómo se debe lograr esto usando Apio ...

¿Puede alguien ayudarme con un ejemplo básico y funcional de creación, registro y ejecución de una tarea periódica django-apio? En particular, quiero saber si debo escribir una tarea que extienda la clase PeriodicTask y registrarla, o si debería usar el decorador @periodic_task, o si debería usar el decorador @task y luego configurar un cronograma para la tarea. ejecución.

No me importa si las tres formas son posibles, pero me gustaría ver un ejemplo de al menos una manera que funcione. Realmente aprecio tu ayuda.

Respuesta

37

¿Qué pasa con el 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() 

Se puede escribir la misma tarea usando un decorador:

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

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

El decorator syntax simplemente le permita activar una función/tarea existente en una tarea periódica sin modificar directamente.

Para las tareas que se ejecutarán celerybeat must be running.

+0

Gracias por la respuesta. Es bueno saber para qué es exactamente el decorador y por qué existen dos formas de la misma cosa. ¿Es correcto que no tenga que registrar PeriodicTasks entonces? Encontré este ejemplo difícil de encontrar en la documentación y podría ser de simplificación (como lo ha hecho anteriormente). Gracias de nuevo. –

+0

Oye, aquí hay otro ejemplo de los documentos: http://ask.github.com/celery/reference/celery.decorators.html No tiene que registrar explícitamente la tarea si usa el decorador. Es bastante similar a las opciones que tiene registrar sus etiquetas de plantilla y filtros en Django (https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#registering-the-tag), si está más familiarizado con eso. – arie

+0

Gracias de nuevo por su ayuda. –

Cuestiones relacionadas