Processamento paralelo fácil com xargs

4 min

language: ja bn en es hi pt ru zh-cn zh-tw

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.

Related Posts