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.952 ]

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

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

Defesa pessoal com o GPG, Nautilus Scripts, partições encriptadas e leves doses de paranoia

Calculando o Imposto de Renda 2015 com o LibreOffice Calc

Guia Rápido do Miniconda para Aplicações Científicas - Instalação e Configuração

Tutorial GIMP: Preparando mapas para artigos científicos

Leitura recomendada

Piano Gripe 3 - Caracteres de controle

Alta disponibilidade de links

Criando Autoridades Certificadores e Certificados de Testes no Linux

Shell Script como serviço no Windows

cal2svg - brincando com shell script e arquivos vetoriais SVG

  
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