Celery: Impossible d'exécuter des tâches sous Windows

Créé le 8 juin 2017  ·  13Commentaires  ·  Source: celery/celery

Celery 4.x démarre (avec les correctifs # 4078) mais toutes les tâches se bloquent

Étapes à suivre pour reproduire

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)

Comportement prévisible

La tâche est exécutée et un résultat de 4 est produit

Comportement réel

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


  • ** ---------- [config]
  • ** ----------.> application: perse: 0x24eecc088d0
  • * ----------.> transport: amqp: // invité : * @ localhost: 5672 //
  • ** ----------.> résultats: rpc: //
  • * --- * ---.> simultanéité: 12 (prefork)- * ** ----.> événements de tâche: OFF (activer -E pour surveiller les tâches dans ce worker)

-------------- [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)

Réparer

Voir pull request # 4078

Documentation Windows Not a Bug

Commentaire le plus utile

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

Tous les 13 commentaires

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

Cette page vous a été utile?
0 / 5 - 0 notes