2010-07-28 4 views
6

Ne parle pas de la méthode delay.Comment retarder une tâche avec Celery?

Je veux être en mesure d'obtenir une tâche, étant donné qu'il s'agit de task_id et de modifier son ETA à la volée avant de l'exécuter.

Pour l'instant je dois l'annuler, et re-programmer un. Inquiétant si le processus programmé implique beaucoup de choses.

+0

Alors avez-vous réussi à le faire à la fin? – julkiewicz

+0

Vous pouvez retarder n'importe quelle tâche en utilisant * céleri *, à condition que vous définissiez la tâche comme "absorption de calories". ;-) http://wiki.answers.com/Q/Is_it_true_that_celery_has_negative_calories – Sam

+0

@Sam lold, thx. – julkiewicz

Répondre

1

Vous devez stocker une valeur de "pause" en dehors de la file d'attente de céleri/tâche. Je fais cela avec un expéditeur utilisant du céleri. Je peux mettre en pause des parties du système en définissant des valeurs dans memcache ou mysql. Les tâches s'assurent ensuite d'interroger la ressource externe avant d'exécuter la tâche. S'il est supposé être mis en pause, il définit un task.retry() qui le fait passer par le délai de réessai et ainsi de suite.

+0

Le prupose pour enlever la tâche de la file d'attente. Si c'est juste ce que vous suggérez, le contrib AbortableTask le fait déjà. –

1

En supposant que vous utilisez django-céleri et PeriodicTask avec DatabaseScheduler, vous devez modifier votre intervalle PeriodicTask ou crontab et enregistrez-le. Si votre tâche est définie par un intervalle, modifiez la propriété last_run_at.

Vous exécutez celerybeat avec le planificateur de base de données avec:

python manage.py celerybeat -S djcelery.schedulers.DatabaseScheduler 
+1

Le problème est que les intervalles ne sont pas uniformes, donc malheureusement je n'utilise pas PeriodicTask. Je dois faire exactement ce qui a été spécifié dans la question. – julkiewicz

Questions connexes