Una tarea finita de apio batido

Estoy usando Celery en un proyecto que se integra con una API de terceros. Necesito enviar un archivo al servicio para su procesamiento. Después de enviar el archivo, necesito solicitar el estado del procesamiento cada 3 segundos hasta que se complete.

Tal como lo tengo ahora, la tarea principal generará subtareas para verificar el estado del procesamiento. Me gustaría que estas subtareas actúen como tareas finitas de batido de apio. Quiero comenzar la vida de la tarea cuando la llamo como una subtarea y quiero terminarla cuando la tarea esté completa.

¿Cuál es la mejor manera de lograr esto?

preguntado el 09 de marzo de 12 a las 15:03

1 Respuestas

Utilice Task.retry, por ejemplo:

from celery.result import AsyncResult

@task
def verify_task(task_id):
    result = AsyncResult(task_id)
    if result.ready():
         do_something_with(result.get())
    else:
        verify_task.retry(countdown=1)

La cuenta regresiva es el número de segundos antes del reintento.

respondido 10 mar '12, 01:03

¡Gracias! Es bueno saber que el reintento está diseñado para usarse fuera del manejo de excepciones. - Kenzic

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.