¿El paralelo GNU del pobre hombre implementado en ksh?

8

Me gustaría usar la función de GNU paralelo donde puede ejecutar el comando y la lista que se alimenta en paralelo y escupirlo después de que todo esté hecho, sin embargo, no quiero instalar GNU paralelo en todos nuestros servidores.

O tal vez una versión paralela de xargs?

¿Existe una implementación ksh de lo que hace GNU Parallel? En este caso, no tiene que hacerse en orden como lo hace GNU Parallel, siempre y cuando toda la salida se pueda canalizar o almacenar. También me gustaría evitar el uso de archivos temporales.

Nitrodista
fuente
GNU Parallel es un solo script perl. Tengo curiosidad por qué prefiere instalar un script ksh en lugar de instalar un script perl único que esté diseñado para tener muy pocas dependencias. Puedes profundizar sobre eso? (Divulgación: soy el autor de GNU Parallel)
Ole Tange

Respuestas:

6

Si desea paralelizar en una máquina con múltiples núcleos, puede usar (GNU) xargs, por ejemplo:

echo seq_[0-9][0-9].gz | xargs -n 1 -P 16 ./crunching

Significado: xargsinicia hasta 16 procesos en paralelo al ./crunchinguso de 1 token de stdin para cada proceso.

También se puede usar spliten combinación con xargs.

O puede crear un Makefile simple para la ejecución del trabajo y la llamada make -f mymf -j $CORES(necesita archivos temporales para esta solución).

PD: El manual paralelo de GNU también incluye algunas comparaciones con otras herramientas, incluidos xargs y make , curiosamente escriben:

(Las primeras versiones de GNU paralelo se implementaron de manera coincidente usando make -j).

maxschlepzig
fuente
Para el autor de la pregunta es importante que "toda la salida se pueda canalizar o almacenar". xargses notoriamente malo en eso cuando se ejecuta en paralelo porque la salida puede mezclarse.
Ole Tange
@maxschlepzig: estoy de acuerdo con tu respuesta al 100%, siempre uso xargs. ¡Muchas personas simplemente no saben que GNU xargs puede hacer paralelo!
JM Becker
0

Observe parallel --embedqué integra GNU Parallel en el mismo script de shell desde el que lo usa.

parallel --embed > new_script

luego edite new_script.

Ole Tange
fuente