2017-01-23 1 views
0

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?

Répondre

1

Affichage de cette réponse pour toute autre personne susceptible d'être confrontée au même problème. Le code backend redis dans le céleri est écrit de telle manière que les résultats sont poussés vers une liste redis, dès qu'elle se termine, et donc le changement d'ordre.

J'avais posté la même requête dans la page des problèmes de github de celery et j'ai obtenu le answer de l'un des contributeurs.