GNU Parallel di Poor Man implementato in ksh?


8

Mi piacerebbe usare la funzione di GNU parallel dove può eseguire il comando e l'elenco è alimentato in parallelo e sputarlo dopo tutto, tuttavia, non voglio installare GNU parallelo su tutti i nostri server.

O forse una versione parallela di xargs?

Esiste un'implementazione ksh di ciò che fa GNU Parallel? In questo caso, non è necessario eseguirlo come GNU Parallel, purché sia ​​possibile eseguire il piping o la memorizzazione di tutto l'output. Vorrei anche evitare di utilizzare file temporanei.


GNU Parallel è un singolo script perl. Sono curioso di sapere perché preferisci installare uno script ksh piuttosto che installare un singolo script perl progettato per avere pochissime dipendenze. Puoi approfondire questo? (Rivelazione: sono l'autore di GNU Parallel)
Ole Tange,

Risposte:


6

Se vuoi parallelizzare su una macchina con più core, puoi semplicemente usare (GNU) xargs, ad esempio:

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

Significato: xargsavvia fino a 16 processi parallelamente ./crunchingall'utilizzo di 1 token da stdin per ciascun processo.

Puoi anche usarlo splitin combinazione con xargs.

Oppure è possibile creare un semplice Makefile per l'esecuzione e la chiamata del lavoro make -f mymf -j $CORES(per questa soluzione sono necessari file temporanei).

PS: Il manuale parallelo GNU include anche alcuni confronti con altri strumenti, tra cui xargs e make , in modo interessante scrivono:

(Le versioni molto antiche di GNU parallel sono state implementate in modo casuale usando make -j).


È importante per chi chiede che "tutto l'output può essere convogliato o archiviato". xargsè notoriamente negativo in questo modo quando viene eseguito in parallelo perché l'output può essere mischiato.
Ole Tange,

@maxschlepzig: sono d'accordo con la tua risposta al 100%, utilizzo sempre solo xargs. Molte persone semplicemente non sanno che GNU xargs è in grado di fare parallelo!
JM Becker,

0

Guarda da parallel --embedquale GNU Parallel è incorporato lo stesso script di shell da cui lo usi.

parallel --embed > new_script

quindi modifica new_script.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.