używam Django seler Redis uruchomić kilka zadań tak:Korzystanie akord django-seler, celery.chord_unlock utrzymuje wykonujący zawsze niestawienie dostarczonego zwrotnego
header = [
tasks.invalidate_user.subtask(args = (user)),
tasks.invalidate_details.subtask(args = (user))
]
callback = tasks.rebuild.subtask()
chord(header)(callback)
Więc w zasadzie takie same, jak określono w documentation.
Moim problemem jest to, że gdy ten akord zadanie nazywa, celery.chord_unlock
zadanie utrzymuje powtórzeń zawsze. Zadania w header
kończą się pomyślnie, ale ponieważ nigdy się nie kończą, callback
nigdy nie jest nazywane.
Zgadywanie, że moim problemem jest brak możliwości wykrycia, że zadania od header
zostały zakończone, przejrzałam dokumentację, aby sprawdzić, jak można to dostosować. Znalazłem a section, opisujące sposób zaimplementowania synchronizacji, podano przykład, czego mi brakuje, to w jaki sposób mogę wywołać funkcję przykładową (tzn. Czy istnieje sygnał do tego?).
Ponadto istnieje notatka, że metoda ta nie jest używana z Redis backend:
ten jest wykorzystywany przez wszystkie backendów wynikowych z wyjątkiem Redis i Memcached, które przyrost licznik po każdym zadaniu w nagłówku, a następnie nałożeniem oddzwanianie, gdy licznik przekroczy liczbę zadań w zestawie.
Ale też mówi, że podejście Redis jest lepsze:
Podejście Redis i Memcached jest znacznie lepszym rozwiązaniem
Jakie podejście jest? W jaki sposób jest wdrażany?
Dlaczego więc chord_unlock
nigdy nie zostało wykonane i jak mogę wykryć zakończone zadania header
?
Używam: Django 1.4, seler 2.5.3, 2.5.5 django-seler, Redis 2.4.12