@celery.task def my_task(my_object): do_something_to_my_object(my_object) #in the code somewhere tasks = celery.group([my_task.s(obj) for obj in MyModel.objects.all()]) group_task = tasks.apply_async() Question: Does celery have something to detect the progress of a group task? Can I get the count of how many tasks were there and how many have been processed?
3 Réponses :
Tinkering autour de la coquille (oil d'ipython Auto-achèvement automatique) J'ai trouvé que a également trouvé la documentation chez HTTP : //docs.celeryproject.org/en/latest/reeferfing/celery.result.html#celery.result.Resultset.com P> group_task code> (qui est un
célery.result.reesultset (code> objet code>) avait une méthode appelée
Terminé_count code> qui a donné exactement ce dont j'avais besoin. P>
Bonjour, j'ai probablement été longue depuis que vous avez rencontré cela, mais je me demande comment vous utilisez cela pour suivre la progression des tâches du groupe sans bloquer .. Si je comprends bien, j'ai besoin d'attribuer résultat = task_group.apply_async () code>, mais la simple affectation elle-même bloque. Sur les autres mains, si nous n'abandonnons pas, nous n'avons pas les méthodes de restauration
complétées_count code> etc ...
@zeroHedge résultat = task_group.apply_async () code> ne doit pas bloquer les résultats, il bloquera jusqu'à ce que toutes les tâches soient en cours, ce qui prenait un moment si vous avez beaucoup de tâches
lecture de la documentation pour http://docs.celeryproject.org/en/latest/reference/cele.result. html # célery.result.asyncresult.collect p> Exemple de sortie: p> Remarque:
L'option EDIT: P> Au cours des tests supplémentaires, cela a constaté que tout en collectant des États, il attendra des résultats, il attend toujours. J'ai constaté que pour obtenir les progrès que vous devez obtenir le résultat des enfants, comme: p> TQDM affiche une progression dans la console p> la mygrraptask est un groupe de céleri retour, comme: p> asyncresult code> Il existe une méthode code> collect code> qui collecte des résultats car ils entrent.
Task.trail code> doit être activée de sorte que la liste des enfants soit stockée dans
résultat.children code>. Ceci est la valeur par défaut mais activé explicitement pour l'illustration. P>
Cela attendra que toutes les tâches de l'enfant remplissent puis renvoient leurs résultats, il ne montre pas de progrès tandis que le groupe est toujours en cours d'exécution.
Mis à jour pour produire réellement une progression, travaillant dans la production
Voici un exemple de travail complet basé sur la réponse de @ Dalore.
Premier Tâches.py code>. p>
docker stop my-rabbit my-redis
docker rm my-rabbit my-redis
Je pense que vous devez mettre "Trail = true" dans @ app.task et pas dans la définition des fonctions
@LBCOMMER merci. Fixé. Son par défaut n'est pas nécessaire, mais comme dans la réponse de Dalore, j'aime bien être explicite depuis que ce comportement en dépend.