Processamento paralelo fácil com xargs
Olá, sou o Muno.
Peço desculpas pela longa ausência de posts, mas estou vivo.
Comprei um Ryzen 5 usado e, para minha surpresa, ele veio com pinos tortos, e só reconhecia um módulo de memória, o que causou alguns problemas, mas de alguma forma estou conseguindo viver.
Consegui outra placa-mãe AM4 M-ATX barata, então estou pensando em usar essa CPU Ryzen para montar um mini PC.
O útil xargs
xargs - Wikipedia
O xargs, que existe como um comando UNIX, é muito útil.
No início, não estava acostumado a usá-lo, mas quanto mais o uso, mais utilidades encontro. É um comando muito bom que nem sequer exige o trabalho de escrever um loop simples em uma única linha.
Caso de Uso
Por exemplo, suponha que você tenha vídeos que deseja salvar com yt-dlp, e eles existam um por linha.
url1
url2
url3
Naturalmente, se você passar tudo para processamento paralelo de uma vez, a carga da CPU será intensa, então, se você quiser executar isso com 2 processos por vez, pode escrever da seguinte forma:
cat url-txt | xargs -I {} -P 2 yt-dlp {}
Com isso, você pode processar 2 processos por vez!
Vamos desconstruir
Então, como isso funciona?
O acima é equivalente a:
yt-dlp url1 ; yt-dlp url2
yt-dlp url3
Em termos de mecanismo, o comando passado para xargs é executado a cada vez.
Seria como ler uma linha (read line) e armazená-la como um array?
E se não houver opções?
Se não houver opções, os argumentos são passados de uma vez para o comando fornecido ao xargs.
Como os comandos compatíveis são limitados, parece melhor usar a opção -I.
Em casos como o seguinte:
cat url-txt | xargs yt-dlp
Nesse caso, o seguinte comando teria sido executado:
yt-dlp url1 url2 url3
Portanto, parece melhor processar com -I sempre que possível, mas em alguns pontos, sem opções também pode ser aceitável.
Caso de Uso 2
Também é útil quando você quer usar grep ou sed apenas em arquivos com nomes específicos usando o comando find.
find . -name "testfile" | xargs -I {} grep "return 0" {}
Dessa forma, é possível usar grep apenas em arquivos específicos com uma descrição tão curta.
Por hoje é só.
Até a próxima.