Używałem selera v3.x przez jakiś czas i myślał o migracji do wersji 4 od czasu oficjalnego wydania. W tej chwili używam wersji 4.0.2 dostępnej za pośrednictwem PyPI. W obu wersjach było kilka niezgodności, ale ta, która mnie myli, to:
Oto mój plik zadań:
from celery import group, chord
from worker import app
@app.task(name="task")
def task(i):
return i
@app.task(name="remaining")
def dummy(result):
print result
@app.task(name="mainTask")
def mainTask():
groupTask = group([task.s(i) for i in range(0,10)])
job = chord(groupTask, dummy.s())()
return job
Kiedy dzwonię do mainTask
, kolejne zadanie grupowe zostanie wykonane, ale kiedy próbuję wydrukować wyniki tego zadania przez dummy
, kolejność rezultatów jest zawalona. Przykładowy wynik to:
[0, 1, 2, 3, 4, 8, 6, 9, 7, 5]
Dziwne jest to, że dzieje się to tylko wtedy, gdy backend wyniku jest redis. Podczas korzystania z amqp wyniki są wyświetlane w dokładnej kolejności:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
P., To zachowanie NIE było obecne w starszej wersji selera. Redis oraz amqp zwracały wyniki w odpowiedniej kolejności. Czy czegoś mi brakuje?
Odpowiedzi:
1 dla odpowiedzi № 1Publikowanie tej odpowiedzi dla każdego, kto może mieć ten sam problem.
Kod zaplecza redis w selera jest napisany w taki sposób, że wyniki są wypychane na listę redis, gdy tylko zostaną zakończone, a tym samym zmiana kolejności.
Wysłałem to samo zapytanie na stronie problemów z githubem selera i otrzymałem odpowiedź od jednego z autorów.