/ / Zachowanie grupowe Celery v4 z zapleczem redis - python, redis, rabbitmq, seler, amqp

Zadanie zachowania grupy Celery v4 z backendem redis - python, redis, rabbitmq, seler, amqp

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 № 1

Publikowanie 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.