Procesamiento paralelo sencillo con xargs
Hola, soy Munou.
Siento que haya pasado tanto tiempo desde mi última publicación, pero estoy vivo.
Compré un Ryzen 5 de segunda mano y, sorprendentemente, tenía pines doblados, y solo reconocía una ranura de memoria, lo que causó algunos problemas, pero de alguna manera sigo adelante.
Conseguí otra placa base AM4 M-ATX barata, así que estoy pensando en usar ese chip Ryzen para construir un mini PC.
El útil xargs
xargs - Wikipedia
El comando xargs, que existe como un comando UNIX, es muy útil.
Al principio no estaba acostumbrado a usarlo, pero cuanto más lo uso, más utilidades encuentro; es un comando excelente que incluso elimina la necesidad de escribir bucles simples en una sola línea.
Caso de Uso
Por ejemplo, supongamos que tienes videos que quieres guardar con yt-dlp, y cada uno está en una línea.
url1
url2
url3
Si lo pasas a un procesamiento paralelo masivo, la carga de la CPU se disparará, así que si quieres ejecutarlo de dos procesos en dos procesos, puedes escribirlo de la siguiente manera.
cat url-txt | xargs -I {} -P 2 yt-dlp {}
¡Con esto solo, puedes procesar dos procesos a la vez!
Desglosemos esto
Entonces, ¿cómo funciona esto?
Lo anterior es equivalente a lo siguiente:
yt-dlp url1 ; yt-dlp url2
yt-dlp url3
En términos de mecanismo, el comando pasado a xargs se ejecuta cada vez.
¿Es como si leyera una línea (read line) y la almacenara como un array?
¿Qué pasa si no hay opciones?
Si no hay opciones, se pasa el comando a xargs de una sola vez.
Dado que los comandos compatibles son limitados, creo que es mejor usar la opción -I.
En un caso como el siguiente:
cat url-txt | xargs yt-dlp
En este caso, se habría ejecutado el siguiente comando:
yt-dlp url1 url2 url3
Por lo tanto, parece mejor procesar con -I siempre que sea posible, pero en algunos puntos, también podría estar bien sin opciones.
Caso de Uso 2
También es útil cuando quieres usar grep o sed solo en archivos con nombres específicos usando el comando find.
find . -name "testfile" | xargs -I {} grep "return 0" {}
De esta manera, es posible usar grep solo en archivos específicos con una descripción tan corta.
Eso es todo por hoy.
Hasta la próxima.