Comment puis-je planifier une tâche à exécuter à un moment précis en utilisant le céleri?

StackOverflow https://stackoverflow.com/questions/1990531

Question

Je l'ai regardé dans PeriodicTask, mais les exemples ne couvrent que ce qui en fait se reproduire. Je cherche quelque chose de plus comme la capacité de cron à dire « exécuter cette tâche tous les lundis à 1 a.m. »

Était-ce utile?

La solution

La récente version 1.0.3 supporte maintenant, grâce à Patrick Altman!

Exemple:

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

@periodic_task(run_every=crontab(hour=7, minute=30, day_of_week="mon"))
def every_monday_morning():
    print("This runs every Monday morning at 7:30a.m.")

Voir le changelog pour plus d'informations:

http://celeryproject.org/docs/changelog.html

Autres conseils

Utilisez

YourTask.apply_async(args=[some, args, here], eta=when)

Et à la fin de votre tâche, le reporter à la prochaine fois il devrait fonctionner.

Je viens de soumettre un patch pour ajouter un TâchePlanifiée pour accomplir un petit peu de planification en fonction du temps par rapport basée sur une période:

https://github.com/celery/celery/commit/e8835f1052bb45a73f9404005c666f2d2b9a9228

Comment vous pouvez lire dans cette tutoriel , vous pouvez faire un PeriodicTask , je pense que si vous avez exécuter une tâche à 1 .am. Le matin de lundi est parce que vous wan pour exécuter une opération cpu / mem long, rememeber utilisation de céleri AMPQ pour les tâches de mise en file.

Alors que la réponse de @ asksol tient toujours, l'api a été mis à jour. Pour le céleri 4.1.0, je dois importer crontab et periodic_task comme suit:

from celery.schedules import crontab
from celery.task import periodic_task
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top