GNU Parallel: criando atividades em paralelo com shell script

No tutorial de hoje falarei sobre o GNU Parallel, uma ferramenta fantástica para quem utiliza Shell Script. O Parallel é um utilitário GNU que permite incluir alguma forma de paralelismo nos scripts, melhorando significativamente a performance em sistemas multinúcleo. Seu funcionamento é simples, e lembra um pouco o módulo Multiprocessing do Python.

[ Hits: 6.088 ]

Por: Bruno Rafael Santos em 05/01/2023 | Blog: https://cutt.ly/4H7vrPh


Introdução



Curiosamente, a primeira menção ao Parallel aqui no VOL vem de uma dica de de 2012. Até o momento, ele não é distribuído por padrão em todas as distribuições e precisa ser instalado manualmente. Felizmente, esta disponível nativamente na maioria dos repositórios.
No Fedora 37, o nome do pacote é "parallel":

dnf install parallel

Depois disto ele pode ser utilizado em qualquer script ou comando, diretamente do Bash ou shell script.

Sintaxe

Ele é relativamente fácil de utilizar e tão bem documentado que tem desde cheatsheet a livro sobre ele. Mas o funcionamento é bem simples. Um comando básico no Parallel tem a seguinte estrutura:

parallel cmd {} ::: parâmetros;

Vejamos os elementos um por um:
  • cmd: é um comando que possa ser chamado no shell.
  • {}: é um parâmetro que possa ser necessário para o comando.
  • ::: á um operador indicando que o próximo item é um parâmetro.
  • parâmetros: é uma lista de parâmetros que podem ser chamados.

Notem que a sintaxe é excessivamente simples. Os parâmetros podem ser vários, eles serão substituídos na ordem em que forem dados. E podem ter tamanhos diferentes, o Parallel cuida de distribuir as combinações. Por exemplo, considere os seguintes parâmetros, que lhes mostro como um array:

#!/bin/bash
x=(a b c);
y=(1 2 3);
parallel echo {} ::: x{[@]} ::: ${y[@]};

Notem que os parâmetros devem ser passados já em sua forma expandida. Para globs isso é bem óbvio, para variáveis, pode ser um desafio. Notem também que o Parallel entende expansões, globs e listas de parâmetros nativamente:

parallel echo {} ::: 1 2 3 ::: a b c

O comando acima dá no mesmo que o anterior, tem mais cara de bash escrito interativamente. Em ambos os dados, o Parallel passará para o echo todas as combinações possíveis dos parâmetros cobrindo o máximo possível de possibilidades.

O que o comando recebe é algo muito parecido com a lista típica de parâmetros que um script receberia, por isso, não importando quantos parâmetros são dados, somente uma entrada é dada. O comando acima é o mais comum, outras possibilidades são:

#!/bin/bash
parallel --arg-file dados.txt echo;
cat dados.txt | parallel echo;
parallel echo :::: dados.txt;

Notem que no último comando não é necessário passar uma entrada, e o operador é :::: com quatro caracteres.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Uso em scripts
   3. Conclusão
Outros artigos deste autor

Devo atender? Um ótimo aplicativo para bloquear Telemarketing

Assinatura de documentos PDF em lote via Bash

getopts: criando scripts Bash com parâmetros e argumentos personalizáveis

Calculando o Imposto de Renda 2015 com o LibreOffice Calc

Recuperação de arquivos do LibreOffice

Leitura recomendada

Receba seu IP externo via e-mail ou ensine o bash a ler e enviar e-mails

Kit de scripts para backup (Full + Diferencial + Samba + Rede)

BackRE - Seu script de backup remoto

cal2svg - brincando com shell script e arquivos vetoriais SVG

flock - Gerenciador de lockfiles

  
Comentários
[1] Comentário enviado por danniel-lara em 05/01/2023 - 21:32h


Muito bacana o Artigo
parabéns

[2] Comentário enviado por maurixnovatrento em 13/01/2023 - 12:28h


Muito bom artigo.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/mxnt10


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts