GNU paralelo - GNU parallel

Paralelo
GNU-paralelo.svg
Desarrollador (es) Proyecto GNU
Lanzamiento estable
20210422/22 de abril de 2021 ; Hace 2 meses ( 22 de abril de 2021 )
Repositorio Edita esto en Wikidata
Escrito en Perl
Sistema operativo ÑU
Tipo Utilidad
Licencia GPLv3
Sitio web www .gnu .org / software / paralelo / Edita esto en Wikidata

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

Video de introducción, parte 1
Video de introducción, parte 2

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.

Ver también

Referencias

enlaces externos