Celery 4.x démarre (avec les correctifs # 4078) mais toutes les tâches se bloquent
Utiliser le didacticiel Premiers pas (http://docs.celleryproject.org/en/latest/getting-started/first-steps-with-celery.html)
céleri -A tâche ouvrière --loglevel = info
délai supplémentaire (2,2)
La tâche est exécutée et un résultat de 4 est produit
Le céleri s'écrase.
"C: \ Program Files \ Python36 \ Scripts \ celery.exe" -A perse.cellery worker -l info
-------------- céleri @ PETRUS v4.0.2 (appel latent)
--- * * * - Windows-10-10.0.14393-SP0 08/06/2017 15:31:22
-------------- [files d'attente]
.> échange de céleri = clé céleri (directe) = céleri
[Tâches]
. perse.tasks.cellery_add
[2017-06-08 15: 31: 22,685: INFO / MainProcess] Connecté à amqp: // guest : *@127.0.0.1: 5672 //[2017-06-08 15: 31: 22,703: INFO / MainProcess] mingle: recherche de voisins[2017-06-08 15: 31: 23,202: INFO / SpawnPoolWorker-5] processus enfant 5124 appelant self.run ()[2017-06-08 15: 31: 23,207: INFO / SpawnPoolWorker-4] processus enfant 10848 appelant self.run ()[2017-06-08 15: 31: 23,208: INFO / SpawnPoolWorker-10] processus enfant 5296 appelant self.run ()[2017-06-08 15: 31: 23,214: INFO / SpawnPoolWorker-1] processus enfant 5752 appelant self.run ()[2017-06-08 15: 31: 23,218: INFO / SpawnPoolWorker-3] processus enfant 11868 appelant self.run ()[2017-06-08 15: 31: 23,226: INFO / SpawnPoolWorker-11] processus enfant 9544 appelant self.run ()[2017-06-08 15: 31: 23,227: INFO / SpawnPoolWorker-6] processus enfant 16332 appelant self.run ()[2017-06-08 15: 31: 23,229: INFO / SpawnPoolWorker-8] processus enfant 3384 appelant self.run ()[2017-06-08 15: 31: 23,234: INFO / SpawnPoolWorker-12] processus enfant 8020 appelant self.run ()[2017-06-08 15: 31: 23,241: INFO / SpawnPoolWorker-9] processus enfant 15612 appelant self.run ()[2017-06-08 15: 31: 23,243: INFO / SpawnPoolWorker-7] processus enfant 9896 appelant self.run ()[2017-06-08 15: 31: 23,245: INFO / SpawnPoolWorker-2] processus enfant 260 appelant self.run ()[2017-06-08 15: 31: 23,730: INFO / MainProcess] mingle: tout seul[2017-06-08 15: 31: 23,747: INFO / MainProcess] céleri @ PETRUS prêt.[2017-06-08 15: 31: 49,412: INFO / MainProcess] Tâche reçue: perse.tasks.cellery_add [524d788e-e024-493d-9ed9-4b009315fea3][2017-06-08 15: 31: 49,416: ERROR / MainProcess] Le gestionnaire de tâches a généré une erreur: ValueError ('pas assez de valeurs pour décompresser (attendu 3, obtenu 0)',)Traceback (dernier appel le plus récent):Fichier "c: \ program files \ python36 \ lib \ site-packages \ billiard \ pool.py", ligne 359, dans la boucle de travailresult = (Vrai, prepare_result (fun ( args, ** kwargs)))
Fichier "c: \ program files \ python36 \ lib \ site-packages \ celery \ app \ trace.py", ligne 518, dans _fast_trace_task
tâches, accepter, nom d'hôte = _loc
ValueError: pas assez de valeurs pour décompresser (attendu 3, obtenu 0)
Voir pull request # 4078
FWIW J'ai contourné ce problème en utilisant l'implémentation du pool d'événements (option de ligne de commande "-P eventlet").
La solution de @drewdogg doit être mentionnée dans le didacticiel.
Je dois confirmer: ce bug apparaît sur
Celery 4.1.0
Windows 10 Enterprise 64 bit
lors de l'exécution de la commande celery -A <mymodule> worker -l info
et la solution de contournement suivante fonctionne:
pip install eventlet
celery -A <mymodule> worker -l info -P eventlet
il suffit de définir la variable d'environnement FORKED_BY_MULTIPROCESSING = 1 pour l'instance de travail.
@auvipy Travaille pour moi, merci.
@auvipy cela résout vraiment le problème
ajouter:
importer le système d'exploitation
os.environ.setdefault ('FORKED_BY_MULTIPROCESSING', '1')
avant de définir l'instance de céleri suffit
peut-être que cela devrait être mentionné dans les documents? @wonderfulsuccess voulez- vous envoyer une pull request?
@wonderfulsuccess
Merci beaucoup
@auvipy cela résout vraiment le problème
ajouter:
importer le système d'exploitation
os.environ.setdefault ('FORKED_BY_MULTIPROCESSING', '1')
avant de définir l'instance de céleri suffit
Merci c'est travaillé!
@auvipy si ce n'est qu'une seule ligne de code à corriger, alors pourquoi ne pas simplement le corriger dans le céleri, au lieu d'utiliser la documentation pour recommander aux utilisateurs d'implémenter une solution de contournement? Pourquoi un bogue complètement révolutionnaire avec une solution aussi simple reste-t-il un problème après près de 2 ans?
où voulez-vous mettre du céleri? Je pense que cela convient bien aux instructions spécifiques à Windows. si vous voulez le corriger au niveau du code, venez avec un PR approprié.
@auvipy cela résout vraiment le problème
ajouter:
importer le système d'exploitation
os.environ.setdefault ('FORKED_BY_MULTIPROCESSING', '1')
avant de définir l'instance de céleri suffit
Vous êtes génial, merci beaucoup!
@auvipy J'ai cherché une réponse à ce problème, j'ai passé beaucoup de temps à essayer de résoudre ce problème, merci beaucoup
Commentaire le plus utile
Je dois confirmer: ce bug apparaît sur
lors de l'exécution de la commande
celery -A <mymodule> worker -l info
et la solution de contournement suivante fonctionne: