parallelism in bash scripting

2

Vamos considerar n declarações s1, s2, s3, ..., sn. Cada instrução tem etapas infinitas de execução e quero executar tudo em paralelo.

meu script de shell parece

s1 
s2 
s3
.
.
.
sn

Como mudar meu código para que a intercalação aconteça?

    
por hanugm 17.01.2018 / 16:04

2 respostas

5

Parece que pedir que cada instrução seja executada em segundo plano pode alcançar o que você deseja:

s1 &
s2 &
...
sn &
wait

(O comando wait faz o script ser executado em primeiro plano até que todas as tarefas em segundo plano sejam concluídas.)

Se você precisar de mais controle, procure usar o GNU paralelo.

    
por 17.01.2018 / 16:09
2

O GNU Parallel é feito para isso:

cat file_with_commands | parallel

O padrão é um trabalho por núcleo da CPU. Se você quer mais do que você tem núcleos:

parallel -j200 < file_with_commands

Se os seus comandos são muito semelhantes:

parallel s{} ::: {1..100}

executará s1 , s2 ... s100 em paralelo.

O GNU Parallel é um paralelizador geral e facilita a execução de trabalhos em paralelo na mesma máquina ou em várias máquinas para as quais você tem acesso ssh.

Se você tem 32 tarefas diferentes que você quer rodar em 4 CPUs, uma forma direta de paralelizar é rodar 8 tarefas em cada processador:

O

GNUParallelgeraumnovoprocessoquandoumtermina-mantendoasCPUsativaseeconomizandotempo:

Instalação

Por razões de segurança, você deve instalar o GNU Parallel com seu gerenciador de pacotes, mas se o GNU Parallel não estiver empacotado para sua distribuição, você pode fazer uma instalação pessoal, que não requer acesso root. Isso pode ser feito em 10 segundos ao fazer isso:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Para outras opções de instalação, consulte o link

Saiba mais

Veja mais exemplos: link

Assista aos vídeos de introdução: link

Percorra o tutorial: link

Inscreva-se na lista de e-mail para obter suporte: link

    
por 18.01.2018 / 11:30