Ich habe eine Situation ähnlich der skizzierten here, mit der Ausnahme, dass anstelle Aufgaben mit mehreren Argumenten von Verkettungs möchte ich Kette Aufgaben, die ein Wörterbuch mit mehreren Einträgen zurück.Sellerie Aufgabe Kette und Zugriff ** kwargs
Dies ist - sehr locker und abstrakt --- was ich versuche zu tun:
tasks.py von ipython
@task()
def task1(item1=None, item2=None):
item3 = #do some stuff with item1 and item2 to yield item3
return_object = dict(item1=item1, item2=item2, item3=item3)
return return_object
def task2(item1=None, item2=None, item3=None):
item4 = #do something with item1, item2, item3 to yield item4
return_object = dict(item1=item1, item2=item2, item3=item3, item4=item4)
return return_object
Arbeiten, ich bin in der Lage task1 einzeln und asynchron aufgerufen , ohne Probleme.
Ich kann task2 auch anrufen individuell mit dem Ergebnis von task1 als Argument Doppelstern zurückgekehrt:
>>res1 = task1.s(item1=something, item2=something_else).apply_async()
>>res1.status
'SUCCESS'
>>res2 = task2.s(**res1.result).apply_async()
>>res2.status
'SUCCESS
Doch was ich erreichen schließlich will, ist das gleiche Endergebnis wie oben, aber über eine Kette, und hier kann ich nicht herausfinden, wie task2 haben instanziiert nicht mit (Positions) Argumente von task1 zurückgekehrt, aber mit task1.result als ** kwargs:
chain_result = (task1.s(item1=something, item2=something_else) | task2.s()).apply_async() #THIS DOESN'T WORK!
ich vermute, dass ich gehen kann zurück und schreibe meine Aufgaben so um, dass t hey Rückkehr Positionsargumente statt einem Wörterbuch, und diese Dinge klären können, aber es scheint mir, dass es einen Weg geben, um task1 Rückkehr Objekt in task2 mit der äquivalenten Funktionalität des ** Doppelstern zugreifen. Ich vermute auch, dass ich hier etwas ziemlich offensichtliches über Sellerie-Subtask-Implementierung oder * Args vs. ** Kwargs verpasse.
Hope das macht Sinn. Und danke im Voraus für irgendwelche Tipps.
verstanden. Vielen Dank. Ich löste dies, indem ich die Eingaben/Rückgaben leicht in meine Aufgabe änderte. T2 sucht jetzt nur nach einem einzelnen dict-Objekt als Eingabe und ruft dann die erwarteten k/value-Paare aus dem dict ab, um die Aufgabe auszuführen. –
@BenjaminWhite ich verstehe es immer noch nicht. Kannst du mir sagen, wie du das gemacht hast? – ashim888