Executando vários trabalhadores usando o aipo

6

Eu preciso ler Rabbitmq e executar tarefas em paralelo usando o Celery em um único sistema.

[2014-12-30 15:54:22,374: INFO/Worker-1] ...   
[2014-12-30 15:54:23,401: INFO/Worker-1] ...
[2014-12-30 15:54:30,878: INFO/Worker-1] ...
[2014-12-30 15:54:32,209: INFO/Worker-1] ...
[2014-12-30 15:54:33,255: INFO/Worker-1] ...
[2014-12-30 15:54:48,445: INFO/Worker-1] ...
[2014-12-30 15:54:49,811: INFO/Worker-1] ...
[2014-12-30 15:54:50,903: INFO/Worker-1] ...
[2014-12-30 15:55:39,674: INFO/Worker-1] ...
[2014-12-30 15:55:41,024: INFO/Worker-1] ...
[2014-12-30 15:55:42,147: INFO/Worker-1] ...

Parece que apenas 1 trabalhador está em execução o tempo todo, ou seja, um após o outro em ordem sequencial. Como posso configurar o Celery para executar vários trabalhadores para serem executados em paralelo?

    
por SrC 30.12.2014 / 12:41

3 respostas

11

Agora atualizei minha resposta após o comentário da MartinP sobre o fato de o trabalhador gerar processos filhos e não encadeamentos:

Aipo worker e worker processes são coisas diferentes ( Leia isto para referência ).

Quando um trabalhador é iniciado, ele gera um certo número de processos filhos.

O número padrão desses processos é igual a um número de núcleos nessa máquina.

No Linux, você pode verificar o número de núcleos via:

$ nproc --all

Caso contrário, você mesmo pode especificar, por exemplo:

$ celery -A proj worker --loglevel=INFO --concurrency=2

No exemplo acima, há um funcionário que poderá gerar 2 processos filhos. Normalmente, é aconselhável executar um único trabalhador por máquina e o valor de simultaneidade definirá quantos processos serão executados em paralelo, mas se vários funcionários precisarem ser executados, você poderá iniciá-los como mostrado abaixo:

$ celery -A proj worker -l info --concurrency=4 -n wkr1@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr2@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr3@hostname

Consulte o aipo docs para mais informações

    
por 08.02.2017 / 23:03
0

Eu encontrei isso

link

Você pode procurar por primitivos do Canvas lá você pode ver como criar grupos para execução paralela.

class celery.group(task1[, task2[, task3[, … taskN]]]) Creates a group of tasks to be executed in parallel.

Caso contrário, uma boa maneira é ir ao canal do IRC e fazer perguntas especiais. Normalmente há pessoas que sabem muito bem e podem ajudá-lo.

    
por 30.12.2014 / 13:38
0

Parece que seu funcionário está apenas executando um único processo / thread. Você provavelmente só precisa adicionar o --concurrency ou -c argumento ao iniciar o trabalhador para gerar várias instâncias de trabalho (paralelas).

celery -A proj worker -c 4
    
por 04.01.2016 / 22:52

Tags