Exemples de Django et de céleri: tâches périodiques

Je me bats depuis un moment avec la documentation Django/Celery et j'ai besoin d'aide.

Je voudrais pouvoir exécuter des tâches périodiques en utilisant django-celery. J'ai vu autour d'internet (et de la documentation) plusieurs formats et schémas différents pour savoir comment on devrait y parvenir en utilisant le céleri...

Quelqu'un peut-il vous aider avec un exemple fonctionnel de base de la création, de l'enregistrement et de l'exécution d'une tâche périodique django-celery? En particulier, je veux savoir si je devrais écrire une tâche qui étend la classe PeriodicTask et l'enregistrer, ou si je devrais utiliser le décorateur @ periodic_task, ou si je devrais utiliser le décorateur @ task, puis configurer un calendrier pour l'exécution de la tâche.

Cela ne me dérange pas si les trois façons sont possibles, mais je voudrais voir un exemple d'au moins une façon qui fonctionne. Vraiment reconnaissant de votre aide.

24
demandé sur jro 2011-11-22 13:25:19

1 réponses

Quel est le problème avec l'exemple des 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()

Vous pouvez écrire la même tâche en utilisant un décorateur:

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

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

La syntaxe de décorateur permet simplement de transformer une fonction/tâche existante en tâche périodique sans les modifier directement.

Pour les tâches à exécuter celerybeat doit être en cours d'exécution.

37
répondu arie 2013-06-15 18:04:54