J'ai donc utilisé celery v3.x pendant un moment et j'ai pensé à migrer vers v4 depuis sa sortie officielle. En ce moment, j'utilise la v4.0.2 disponible via PyPI. Il y avait quelques discordances dans les deux versions, mais celui qui me confond est ceci:Comportement des tâches du groupe Celery v4 avec backend redis
Voici mon fichier tâches:
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
Quand j'appelle l'mainTask
, la tâche de groupe suivant ne sont exécutées, mais lorsque j'essaie d'imprimer les résultats de cette tâche via dummy
, l'ordre des résultats est perturbé. Un exemple de sortie serait:
[0, 1, 2, 3, 4, 8, 6, 9, 7, 5]
La chose étrange est, cela se produit que si le backend résultat est Redis. En utilisant AMQP, les résultats apparaissent dans l'ordre exact comme:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
post-scriptum, ce comportement n'a pas été présent dans l'ancienne version de céleri. Redis et amqp ont retourné les résultats dans le bon ordre. Y a-t-il quelque chose qui me manque?