GNU Parallel es una utilidad de línea de comandos para Linux y otros sistemas operativos tipo Unix que permite al usuario ejecutar scripts de shell o comandos en paralelo . GNU Parallel es un software libre , escrito por Ole Tange en Perl . Está disponible bajo los términos de la GPLv3 . [2]
El uso más común es reemplazar el bucle de la carcasa, por ejemplo
mientras lee x ; hacer hacer_algo " $x " hecho < lista
A la forma de
lista de gatos | hacer_algo en paralelo
donde el archivo list
contiene argumentos para do_something
y donde process_output
puede estar vacío.
Los scripts que utilizan paralelo suelen ser más fáciles de leer que los scripts que utilizan pexec .
El programa también cuenta con funciones paralelas
De forma predeterminada, paralelo ejecuta tantos trabajos en paralelo como núcleos de CPU .
buscar . -nombre "*.foo" | grep paralelo bar
Lo anterior es el equivalente paralelo a:
buscar . -name "*.foo" -exec grep bar {} +
Esta función busca en todos los archivos del directorio actual y sus subdirectorios cuyo nombre termine en .foo
las apariciones de la cadena bar
. El comando paralelo funcionará como se espera a menos que un nombre de archivo contenga una nueva línea . Para evitar esta limitación, se puede utilizar:
buscar . -nombre "*.foo" -print0 | paralelo -0 grep bar
El comando anterior utiliza el carácter nulo para delimitar los nombres de archivos.
buscar . -nombre "*.foo" | paralelo -X mv {} /tmp/trash
El comando anterior se expande {}
con tantos argumentos como lo permita la longitud de la línea de comandos y los distribuye de manera uniforme entre trabajos paralelos si es necesario. Esto puede reducir la sobrecarga del proceso para comandos de corta duración que tardan menos tiempo en finalizar que en iniciarse.
buscar . -maxdepth 1 -type f -name "*.ogg" | paralelo -X -r cp -v -p {} /home/media
El comando anterior hace lo mismo que:
cp -v -p *.ogg /inicio/medios
Sin embargo, el comando anterior que usa find
// es más eficiente en parallel
términos cp
de recursos y no se detendrá con un error si la expansión de *.ogg es demasiado grande para el shell.