GNU paralelo - GNU parallel
| Desarrollador (es) | Proyecto GNU |
|---|---|
| Lanzamiento estable | 20210422/22 de abril de 2021
|
| Repositorio |
|
| Escrito en | Perl |
| Sistema operativo | ÑU |
| Tipo | Utilidad |
| Licencia | GPLv3 |
| Sitio web |
www |
GNU paralelo es una utilidad de línea de comandos para Linux y otros sistemas operativos similares a Unix que permite al usuario ejecutar scripts de shell o comandos en paralelo . GNU paralelo es un software libre , escrito por Ole Tange en Perl . Está disponible bajo los términos de GPLv3 .
Uso
El uso más común es reemplazar el bucle de shell, por ejemplo
while read x; do
do_something "$x"
done < list | process_output
a la forma de
< list parallel do_something | process_output
donde el archivo listcontiene argumentos para do_somethingy donde process_outputpuede estar vacío.
Los scripts que utilizan paralelo suelen ser más fáciles de leer que los que utilizan pexec .
El programa cuenta con funciones paralelas también
- agrupación de la salida estándar y el error estándar para que la salida de los trabajos en ejecución en paralelo no se ejecuten juntos;
- retener el orden de salida para que siga siendo el mismo que el de entrada;
- tratar bien con nombres de archivos que contienen caracteres especiales como espacios, comillas simples, comillas dobles, ampersand y caracteres codificados en UTF-8;
De forma predeterminada, en paralelo se ejecutan tantos trabajos en paralelo como núcleos de CPU hay .
Ejemplos de
find . -name "*.foo" | parallel grep bar
Lo anterior es el equivalente paralelo a:
find . -name "*.foo" -exec grep bar {} +
Esto busca en todos los archivos en el directorio actual y sus subdirectorios cuyo nombre termina en .fooapariciones de la cadena bar . El comando paralelo funcionará como se esperaba a menos que un nombre de archivo contenga una nueva línea . Para evitar esta limitación, se puede utilizar:
find . -name "*.foo" -print0 | parallel -0 grep bar
El comando anterior usa el carácter nulo para delimitar los nombres de los archivos.
find . -name "*.foo" | parallel -X mv {} /tmp/trash
El comando anterior se expande {}con tantos argumentos como lo permita la longitud de la línea de comando, distribuyéndolos uniformemente entre trabajos paralelos si es necesario. Esto puede reducir la sobrecarga del proceso para los comandos de corta duración que tardan menos en finalizar que en iniciarse.
find . -maxdepth 1 -type f -name "*.ogg" | parallel -X -r cp -v -p {} /home/media
El comando anterior hace lo mismo que:
cp -v -p *.ogg /home/media
Sin embargo, el comando anterior que usa find/ parallel/ cpes más eficiente en recursos y no se detendrá con un error si la expansión de * .ogg es demasiado grande para el shell.