El Celery documentation sugiere que es una mala idea tener tareas pendientes de los resultados de otras tareas ... Pero la solución sugerida (consulte el encabezado "bueno") deja algo que desear. Específicamente, no hay una forma clara de devolver el resultado de la subtarea a la persona que llama (también es feo).Python + Celery: ¿Trabajos de encadenamiento?
Entonces, ¿hay alguna forma de "encadenar" los trabajos, por lo que la persona que llama obtiene el resultado del trabajo final? Por ejemplo, para utilizar el add
ejemplo:
>>> add3 = add.subtask(args=(3,))
>>> add.delay(1, 2, callback=add3).get()
6
Alternativamente, ¿está bien para volver instancias de Resultado? Por ejemplo:
@task
def add(x, y, callback=None):
result = x + y
if callback:
return subtask(callback).delay(result)
return result
Esto permitiría que el resultado del trabajo de “final” de la cadena podría retrived con un simple:
result = add(1, 2, callback=add3).delay()
while isinstance(result, Result):
result = result.get()
print "result:", result
Lo que usted propone funcionaría bien. No veo ninguna alternativa, ¿verdad? – asksol