Celery: Incapaz de executar tarefas no Windows

Criado em 8 jun. 2017  ·  13Comentários  ·  Fonte: celery/celery

Celery 4.x inicia (com correções # 4078), mas todas as tarefas travam

Passos para reproduzir

Use o tutorial das primeiras etapas (http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html)

aipo -Um trabalhador de tarefas --loglevel = info
add.delay (2,2)

Comportamento esperado

A tarefa é executada e um resultado de 4 é produzido

Comportamento real

O aipo falha.

"C: \ Arquivos de programas \ Python36 \ Scripts \ celery.exe" -A perse.celery worker -l info

-------------- aipo @ PETRUS v4.0.2 (latentcall)


--- * * * - Windows-10-10.0.14393-SP0 2017-06-08 15:31:22


  • ** ---------- [config]
  • ** ----------.> app : perse: 0x24eecc088d0
  • * ----------.> transport: amqp: // convidado : * @ localhost: 5672 //
  • ** ----------.> resultados: rpc: //
  • * --- * ---.> simultaneidade: 12 (prefork)- * ** ----.> eventos de tarefa: OFF (habilite -E para monitorar tarefas neste trabalhador)

-------------- [filas]
.> troca de aipo = chave de aipo (direta) = aipo

[tarefas]
. perse.tasks.celery_add

[2017-06-08 15: 31: 22.685: INFO / MainProcess] Conectado a amqp: // convidado : *@127.0.0.1: 5672 //[2017-06-08 15: 31: 22.703: INFO / MainProcess] mingle: em busca de vizinhos[2017-06-08 15: 31: 23,202: INFO / SpawnPoolWorker-5] processo filho 5124 chamando self.run ()[2017-06-08 15: 31: 23,207: INFO / SpawnPoolWorker-4] processo filho 10848 chamando self.run ()[2017-06-08 15: 31: 23,208: INFO / SpawnPoolWorker-10] processo filho 5296 chamando self.run ()[2017-06-08 15: 31: 23,214: INFO / SpawnPoolWorker-1] processo filho 5752 chamando self.run ()[2017-06-08 15: 31: 23,218: INFO / SpawnPoolWorker-3] processo filho 11868 chamando self.run ()[2017-06-08 15: 31: 23,226: INFO / SpawnPoolWorker-11] processo filho 9544 chamando self.run ()[2017-06-08 15: 31: 23,227: INFO / SpawnPoolWorker-6] processo filho 16332 chamando self.run ()[2017-06-08 15: 31: 23,229: INFO / SpawnPoolWorker-8] processo filho 3384 chamando self.run ()[2017-06-08 15: 31: 23,234: INFO / SpawnPoolWorker-12] processo filho 8020 chamando self.run ()[2017-06-08 15: 31: 23,241: INFO / SpawnPoolWorker-9] processo filho 15612 chamando self.run ()[2017-06-08 15: 31: 23,243: INFO / SpawnPoolWorker-7] processo filho 9896 chamando self.run ()[2017-06-08 15: 31: 23,245: INFO / SpawnPoolWorker-2] processo filho 260 chamando self.run ()[2017-06-08 15: 31: 23,730: INFO / MainProcess] mesclar: sozinho[2017-06-08 15:31: 23.747: INFO / MainProcess] aipo @ PETRUS pronto.[2017-06-08 15: 31: 49.412: INFO / MainProcess] Tarefa recebida: perse.tasks.celery_add [524d788e-e024-493d-9ed9-4b009315fea3][2017-06-08 15: 31: 49,416: ERROR / MainProcess] Erro gerado pelo manipulador de tarefas: ValueError ('valores insuficientes para descompactar (esperado 3, obtido 0)',)Traceback (última chamada mais recente):Arquivo "c: \ program files \ python36 \ lib \ site-packages \ billiard \ pool.py", linha 359, no workloopresult = (True, prepare_result (fun ( args, ** kwargs)))
Arquivo "c: \ program files \ python36 \ lib \ site-packages \ celery \ app \ trace.py", linha 518, em _fast_trace_task
tarefas, aceitar, nome do host = _loc
ValueError: valores insuficientes para desempacotar (esperado 3, obtido 0)

Fixar

Consulte a solicitação de pull # 4078

Documentation Windows Not a Bug

Comentários muito úteis

Tenho que confirmar: este bug aparece em

Celery 4.1.0
Windows 10 Enterprise 64 bit

ao executar o comando celery -A <mymodule> worker -l info

e a seguinte solução alternativa funciona:

pip install eventlet
celery -A <mymodule> worker -l info -P eventlet

Todos 13 comentários

FWIW Eu trabalhei em torno disso usando a implementação de pool de eventos (opção de linha de comando "-P eventlet").

A solução de @drewdogg deve ser mencionada no tutorial.

Tenho que confirmar: este bug aparece em

Celery 4.1.0
Windows 10 Enterprise 64 bit

ao executar o comando celery -A <mymodule> worker -l info

e a seguinte solução alternativa funciona:

pip install eventlet
celery -A <mymodule> worker -l info -P eventlet

basta definir FORKED_BY_MULTIPROCESSING = 1 variável de ambiente para a instância do trabalhador.

@auvipy Trabalhe para mim, obrigado.

@auvipy realmente resolve o problema :) 👍
adicionar:
importar os
os.environ.setdefault ('FORKED_BY_MULTIPROCESSING', '1')
antes de definir a instância do Celery é suficiente

talvez isso deva ser mencionado nos documentos? @wonderfulsuccess se preocupa em enviar uma solicitação de pull?

@wonderfulsuccess

Muito obrigado

@auvipy realmente resolve o problema
adicionar:
importar os
os.environ.setdefault ('FORKED_BY_MULTIPROCESSING', '1')
antes de definir a instância do Celery é suficiente

Obrigado, funcionou!

@auvipy se esta é apenas uma linha de código para corrigir, então por que não apenas corrigi-la dentro do aipo, em vez de usar os documentos para recomendar aos usuários a implementação de uma solução alternativa? Por que um bug que quebra completamente a plataforma com uma correção tão simples ainda é um problema depois de quase 2 anos?

onde você quer colocar o aipo? Eu acredito que isso é adequado para instruções específicas do Windows. se você quiser consertar no nível de código, venha com um PR apropriado.

@auvipy realmente resolve o problema :) 👍
adicionar:
importar os
os.environ.setdefault ('FORKED_BY_MULTIPROCESSING', '1')
antes de definir a instância do Celery é suficiente

Você é incrível, muito obrigado!

@auvipy tenho procurado uma resposta para este problema, passei muito tempo tentando consertar isso, muito obrigado

Esta página foi útil?
0 / 5 - 0 avaliações