reklama

Skript v bash a parallel

kkt1

  • *****
  • 796
    • Zobrazit profil
Skript v bash a parallel
« kdy: 27. 12. 2018, 13:16:39 »
Zdravim, mam trochu hokej s prikazem parallel v linuxu. Dokumentaci jsem se snazil aplikovat, zatim neuspesne. Mam skript v bashi, ktery dela mimo jine i:
for file in ./
do
   command1
   ...
   commandx
done

Rad bych cely ten loop paralelizoval pres parallel, ale mam hokej v tom jak to udelat jako celek. Nechci paralelizovat jednotlive prikazy z toho loopu, chci cely ten loop tak jak je paralelizovat. Samozrejme jsou v nem ruzne promenne. A rad bych taky omezil mnozstvi paralelne spustenych prikazu. Ma nekdo praktickou zkusenost? Staci mozna nakopnout.

reklama


Mufasa

Re:Skript v bash a parallel
« Odpověď #1 kdy: 27. 12. 2018, 13:40:45 »
Ak hovorime o GNU parallel, tak osobne to casto robim stylom

#ak sa jedna o jeden prikaz
for item in array
do
  echo "file $item"
done | parallel -k -j 4

#ak viacero, pripadne pomocou funkcie
my_job(){
  item=$1
  various
  commands
}; export -f my_job

for item in array
do
  echo "my_job $item"
done | parallel -k -j 4

samozrejme treba mat spravne exportovane premenne atd, ak su vyuzivane

kkt1

  • *****
  • 796
    • Zobrazit profil
Re:Skript v bash a parallel
« Odpověď #2 kdy: 27. 12. 2018, 13:59:58 »
Myslim, ze prave ty promenne mi delaji potize. Jak vidis, tak delam nejake operace nad soubory v adresari, tudiz ten nazev dostanu drive nez ten loop. Jak to spravne zahrnout do te funkce? Pokud to necham v ramci funkce tak predpokladam ze kazdy z tech paralelnich procesu zacne od prvniho souboru.

Kit

Re:Skript v bash a parallel
« Odpověď #3 kdy: 27. 12. 2018, 14:12:45 »
Zkus tohle:
Kód: [Vybrat]
find . -type f -print0 | xargs -0 -P 4 -I % bash -c 'echo "%"; head -n1 "%";'

Mufasa

Re:Skript v bash a parallel
« Odpověď #4 kdy: 27. 12. 2018, 14:19:46 »
Asi uplne nechapem, ale v podstate pre tvoj priklad presne:

Kód: [Vybrat]
my_job(){
   file=$1
   command1
   ...
   commandx
}; export -f my_job

for file in ./
do
  echo "my_job $file"
done | parallel -j 4

v podstate len "obsah" loopu vytlacis do funkcie, ak potrebuju tie commandy nejake premenne tak mozno musis este spravit export nad nimi, ale to uz je specificke ku kazdemu commandu.


stepan

Re:Skript v bash a parallel
« Odpověď #5 kdy: 27. 12. 2018, 14:29:21 »
Linux nepouzivam. To taky radim tobe.

Kit

Re:Skript v bash a parallel
« Odpověď #6 kdy: 27. 12. 2018, 14:35:07 »
Linux nepouzivam. To taky radim tobe.

No dobrá, ale jak bys tento požadavek vyřešil ve svém oblíbeném operačním systému?

Lojza

  • *****
  • 653
    • Zobrazit profil
    • E-mail
Re:Skript v bash a parallel
« Odpověď #7 kdy: 27. 12. 2018, 14:39:32 »
Kit - mne takovehle onelinery neprestavaji udivovat co se da udelat na jedne radce kdyz clovek umi ...

kkt1

  • *****
  • 796
    • Zobrazit profil
Re:Skript v bash a parallel
« Odpověď #8 kdy: 27. 12. 2018, 14:47:26 »
Kite, inspirativni, dekuji.

Jenda

Re:Skript v bash a parallel
« Odpověď #9 kdy: 27. 12. 2018, 18:25:58 »
Já bych chtěl jenom upozornit, že existují dva programy "parallel" - jeden je GNU Parallel z balíčku parallel a jeden je z balíčku moreutils. A samozřejmě se chovají dost rozdílně.

erik80

Re:Skript v bash a parallel
« Odpověď #10 kdy: 28. 12. 2018, 10:44:44 »
viem, ze si ziadal vyslovene pouzit "parallel". da sa to vsak napriklad aj takto:


#!/bin/bash
echo "start of script"
for i in 3 8 1 5
do
     (
         echo "start sleep $i"
    sleep $i
         echo "end sleep $i"
      )&
done
wait
echo "end of script"


kkt1

  • *****
  • 796
    • Zobrazit profil
Re:Skript v bash a parallel
« Odpověď #11 kdy: 28. 12. 2018, 12:49:30 »
dekuji vsem za napady, vyresil jsem to pres GNU parallel. Ne uplne tak jak bych chtel, ale je to funkcni.

 

reklama