GNU/Linux >> Znalost Linux >  >> Linux

Provádění zřetězených příkazů paralelně?

Zvažte následující scénář. Mám dva programy A a B. Program A výstupy na stdout řádky řetězců, zatímco program B zpracovává řádky ze stdin. Způsob použití těchto dvou programů je samozřejmě:

[e-mail chráněný]:~$ A | B

Teď jsem si všiml, že to pohltí pouze jedno jádro; proto se ptám:

Sdílejí programy A a B stejné výpočetní zdroje? Pokud ano, existuje způsob, jak spustit A a B současně?

Další věc, které jsem si všiml, je, že A běží mnohem rychleji než B, a proto by mě zajímalo, jestli by se dalo nějak spouštět více programů B a nechat je zpracovávat linky, které A vypisuje paralelně.

To znamená, že A by vydal své řádky a bylo by N instancí programů B, které by tyto řádky přečetly (kdokoli je přečetl jako první), zpracovaly je a vydaly na stdout.

Takže moje poslední otázka zní:

Existuje způsob, jak vést výstup do A mezi několika procesy B, aniž byste se museli starat o podmínky závodu a další nesrovnalosti, které by mohly potenciálně nastat?

Přijatá odpověď:

Problém s split --filter je, že výstup lze zamíchat, takže dostanete půl řádku z procesu 1 následovanou půlkou řádku z procesu 2.

GNU Parallel zaručuje, že nedojde k záměně.

Předpokládejme tedy, že chcete udělat:

 A | B | C

Ale to B je strašně pomalé, a tak to chcete paralelizovat. Pak můžete:

A | parallel --pipe B | C

GNU Parallel se standardně rozděluje na \n a velikost bloku 1 MB. To lze upravit pomocí –recend a –block.

Více o GNU Parallel najdete na:http://www.gnu.org/s/parallel/

GNU Parallel můžete nainstalovat za pouhých 10 sekund pomocí:

$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
   fetch -o - http://pi.dk/3 ) > install.sh
$ sha1sum install.sh | grep 67bd7bc7dc20aff99eb8f1266574dadb
12345678 67bd7bc7 dc20aff9 9eb8f126 6574dadb
$ md5sum install.sh | grep b7a15cdbb07fb6e11b0338577bc1780f
b7a15cdb b07fb6e1 1b033857 7bc1780f
$ sha512sum install.sh | grep 186000b62b66969d7506ca4f885e0c80e02a22444
6f25960b d4b90cf6 ba5b76de c1acdf39 f3d24249 72930394 a4164351 93a7668d
21ff9839 6f920be5 186000b6 2b66969d 7506ca4f 885e0c80 e02a2244 40e8a43f
$ bash install.sh

Podívejte se na úvodní video na http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1


Linux
  1. 5 Příkazy pro odstraňování problémů se sítí Linux

  2. Mých 8 oblíbených praktických linuxových příkazů

  3. Cheat sheet příkazů IPtables

  1. V jakém pořadí se spouštějí zřetězené příkazy?

  2. Jsou nástroje Linuxu chytré při spouštění příkazů Piped?

  3. Který Bash se provádí?

  1. Linuxové příkazy od A do Z

  2. Linux Základy příkazového řádku – Spouštění příkazů z příkazového řádku

  3. Bash:provádění příkazů z chrootu a přepnutí uživatele