Question Exemples de Django et de Céleri: Tâches périodiques


Je me suis battu contre la documentation Django / Celery depuis un certain temps et j'ai besoin d'aide.

Je voudrais pouvoir exécuter des tâches périodiques en utilisant django-celery. J'ai vu sur Internet (et dans la documentation) plusieurs formats et schémas différents sur la manière de procéder pour atteindre cet objectif en utilisant Celery ...

Quelqu'un peut-il aider avec un exemple de base de fonctionnement de la création, de l'enregistrement et de l'exécution d'une tâche périodique de django-céleri? 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 une planification pour la tâche. exécution.

Cela ne me dérange pas si les trois manières sont possibles, mais j'aimerais voir un exemple d'au moins une façon qui fonctionne. J'apprécie vraiment votre aide.


24
2017-11-22 09:25


origine


Réponses:


Qu'est-ce qui ne va pas avec le 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():
    ....

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

Pour les tâches à exécuter le céleri-beat doit être en marche.


37
2017-11-22 11:25