Jest to dość późno, ale nie sądzę, kod świadczone przez @mpaf jest całkowicie poprawne.
Kontekst: W moim przypadku mam dwie podzadania, z których pierwsza dostarcza wartość zwracaną, która jest przekazywana do drugiej jako argument wejściowy. Miałem problemy z wykonaniem drugiego zadania do wykonania - widziałem w dziennikach, że Seler uznał drugie zadanie za callback pierwszego, ale nigdy nie wykona drugiego.
To był mój kod łańcuch non-working -:
from celery import chain
chain(
module.task1.s(arg),
module.task2.s()
).apply_async(countdown=0.1, queue='queuename')
Korzystanie składni przedstawione w odpowiedzi @ mpaf za, mam oba zadania do wykonania, ale kolejność wykonywania była przypadkowa, a drugi podzadanie nie został potwierdzony jako wywołanie zwrotne pierwszego. Mam pomysł, aby przejrzeć dokumenty, w jaki sposób jawnie ustawić kolejkę na podzadanie.
Jest to kod roboczy -:
chain(
module.task1.s(arg).set(queue='queuename'),
module.task2.s().set(queue='queuename')
).apply_async(countdown=0.1)
Hmmm, że częściowe przykład nie działa na mnie, ja wróciłem następujący błąd: Błąd typu: nieobsługiwany typ operandu (y) |: „” AsyncResult i "AsyncResult" (używając 3.0.23) – Clara
Miałem własne problemy, próbując uzyskać "łańcuch" do wykonania drugiego zadania. Pytanie: Jeśli wywołujesz 'apply_async' w obu zadaniach, czy to naprawdę jest łańcuch? Czy oba zadania nie zostaną wykonane z własnej woli? Wypróbowałem twoją składnię i nie udało mi się, ponieważ w moim przypadku pierwsze podzadanie zwraca wartość, która jest używana przez drugą. – PritishC