Sellerie - Verkettung Gruppen und Teilaufgaben. -> out-of-order execution
Wenn ich etwas wie das folgende
group1 = group(task1.si(), task1.si(), task1.si())
group2 = group(task2.si(), task2.si(), task2.si())
workflow = chain(group1, group2, task3.si())
Die intuitive interpretation ist, dass task3 sollte nur ausgeführt werden, wenn alle Aufgaben in der Gruppe 2 abgeschlossen haben.
In der Realität, Aufgabe 3 ausgeführt, während Gruppe1 hat begonnen, ist aber noch nicht abgeschlossen noch.
Was mache ich falsch?
- Ein update auf diese neue version von Sellerie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe das gleiche Problem mit Sellerie, versucht zu haben einen workflow, bei dem der erste Schritt "spawn eine million Aufgaben". Versucht Gruppen von Gruppen, Arbeitsschritte, irgendwann mein step2 kicks off, bevor Sie Schritt 1 über.
Lange Geschichte kurz ich vielleicht eine Lösung gefunden haben mit der Verwendung von Akkorden und einem dämlichen finisher:
Nichts zu tun viel, aber es ermöglicht mir, dies zu tun:
Ursprünglich wollte ich Schritt1 in einer Teilaufgabe, aber aus dem gleichen Grund wie vermutet, wird die Aktion für den Aufruf einer Gruppe endet, die Aufgabe gilt als beendet, und mein workflow bewegt sich auf...
Wenn jemand etwas besser, ich bin interessiert!
So wie es sich herausstellt, in Sellerie-Sie können die Kette in zwei Gruppen zusammen.
Ich vermute, dass dies ist, weil die Gruppen verkettet mit Aufgaben automatisch zu einem Akkord
--> Sellerie docs: http://docs.celeryproject.org/en/latest/userguide/canvas.html
Rückkehr der Gruppen eine übergeordnete Aufgabe. Bei der Verkettung von zwei Gruppen zusammen, vermute ich, dass bei der ersten Gruppe abgeschlossen ist, wird der Akkord beginnt die callback "Aufgabe". Ich vermute, diese "Aufgabe" ist eigentlich die "übergeordnete Aufgabe" der zweiten Gruppe. Ich vermute, dass diese übergeordnete Aufgabe abgeschlossen, sobald es fertig ist startet alle Teilaufgaben innerhalb der Gruppe und als ein Ergebnis das nächste Element nach der 2. Gruppe ausgeführt wird.
Dies zu demonstrieren, hier einige Beispiel-code. Sie müssen bereits über eine laufende Sellerie Instanz.
def fake_celery_task(): pass
zu laufen, zwischen den Gruppen...