Ich verwende Django Sellerie mit Redis einige Aufgaben, wie dies auszuführen:django-Sellerie-Akkord verwenden, hält celery.chord_unlock Ausführung immer nicht die bereitgestellte Callback ruft
header = [
tasks.invalidate_user.subtask(args = (user)),
tasks.invalidate_details.subtask(args = (user))
]
callback = tasks.rebuild.subtask()
chord(header)(callback)
Also im Grunde das gleiche wie in angegeben documentation.
Mein Problem ist, dass, wenn dieser Task-Akkord aufgerufen wird, celery.chord_unlock
Aufgabe erneut für immer versucht. Aufgaben in header
erfolgreich abgeschlossen, aber wegen chord_unlock
nie getan, callback
wird nie genannt.
Denke, dass mein Problem darin besteht, nicht erkennen zu können, dass die Aufgaben von header
beendet sind, wandte ich mich an Dokumentation, um zu sehen, wie dies angepasst werden kann. Ich habe a section gefunden, die beschreiben, wie die Synchronisation implementiert wird, gibt es ein Beispiel zur Verfügung gestellt, was ich vermisse, ist, wie bekomme ich diese Beispielfunktion aufgerufen werden (d. H. Gibt es ein Signal dafür?).
Weiterhin gibt es eine Notiz, dass diese Methode nicht mit Redis Backend verwendet wird:
Diese von alle Ergebnis Backends außer Redis und Memcached, die nach jeder Aufgabe einen Zähler erhöhen im Header verwendet wird, dann ist die Anwendung Callback, wenn der Zähler die Anzahl der Aufgaben im Set überschreitet.
Aber auch sagt, dass Redis Ansatz besser ist:
Der Redis und Memcached Ansatz ist eine viel bessere Lösung
Welcher Ansatz ist das? Wie wird es umgesetzt?
Also, warum ist chord_unlock
nie getan, und wie kann ich es fertige header
Aufgaben erkennen lassen?
Ich verwende: Django 1.4, Sellerie 2.5.3, django-Sellerie 2.5.5, redis 2.4.12