Il Celery documentation suggerisce che è una cattiva idea avere compiti in attesa dei risultati di altri compiti ... Ma la soluzione suggerita (vedi intestazione "buona") lascia un qualcosa a desiderare. Nello specifico, non esiste un modo chiaro per riportare il risultato del sottotask al chiamante (è anche un po 'brutto).Python + Celery: concatenare lavori?
Quindi, c'è un modo per "concatenare" i lavori, quindi il chiamante ottiene il risultato del lavoro finale? Ad esempio, per utilizzare il add
esempio:
>>> add3 = add.subtask(args=(3,))
>>> add.delay(1, 2, callback=add3).get()
6
In alternativa, è OK per tornare istanze di Risultato? Per esempio:
@task
def add(x, y, callback=None):
result = x + y
if callback:
return subtask(callback).delay(result)
return result
Ciò avrebbe lasciato il risultato del lavoro di “finale” nella catena potrebbe essere retrived con un semplice:
result = add(1, 2, callback=add3).delay()
while isinstance(result, Result):
result = result.get()
print "result:", result
Cosa proponete avrebbe funzionato bene. Non vedo alcuna alternativa, vero? – asksol