2010-07-28 13 views
6

No se habla del método delay.¿Cómo puedo retrasar una tarea usando Apio?

Quiero ser capaz de obtener una tarea, dado que es task_id y cambiar su ETA sobre la marcha, antes de que se ejecute.

Por ahora tengo que cancelarlo y volver a programar uno. Resulta problemático si el proceso programado involucra muchas cosas.

+0

Así se las arregló para hacerlo al final? – julkiewicz

+0

Puede demorar cualquier tarea usando * apio *, siempre que defina la tarea como "calorías absorbentes". ;-) http://wiki.answers.com/Q/Is_it_true_that_celery_has_negative_calories – Sam

+0

@Sam lold, thx. – julkiewicz

Respuesta

1

Debe almacenar algún valor 'de pausa' fuera de la cola de apio/tarea. Lo hago con un programa de correo usando apio. Puedo pausar partes del sistema estableciendo valores en memcache o mysql. Las tareas se aseguran de consultar el recurso externo antes de ejecutar la tarea. Si está destinado a pausarse, establece que hace una tarea.retry() que hace que pase por el tiempo de retardo de reintento y tal.

+0

Lo prupose para eliminar la tarea de la cola. Si es solo lo que sugiere, el contrib AbortableTask ya lo hace. –

1

Suponiendo que está utilizando django-apio y PeriodicTask con DatabaseScheduler, necesita modificar su intervalo PeriodicTask o crontab y guardarlo. Si su tarea está definida por un intervalo, modifique la propiedad last_run_at.

Ejecuta celerybeat con el programador de base de datos con:

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

El problema es que los intervalos no son uniformes, así que desafortunadamente no estoy usando PeriodicTask. Necesito hacer exactamente lo que se especificó en la pregunta. – julkiewicz

Cuestiones relacionadas