Bash Parallel Jobs Using For Loop

Bash Parallel Jobs Using For Loop



V Linuxe existuje veľa spôsobov, ako paralelne spúšťať viacero príkazov alebo Bash skriptov. Jedným zo spôsobov je použiť slučku „for“ v skripte Bash na spustenie paralelnej úlohy. Táto slučka je veľmi užitočná na spustenie paralelných úloh pomocou príkazu „seq“. V tomto návode sú uvedené rôzne spôsoby vykonávania paralelných úloh pomocou cyklu „for“.

Rôzne príklady paralelných úloh

Rôzne spôsoby spúšťania paralelných úloh pomocou cyklu „for“ sú uvedené v tejto časti návodu.

Príklad 1: Spustite paralelné úlohy pomocou slučky „For“.

Použitie cyklu „for“ je jednoduchší spôsob vykonávania paralelných úloh v skripte Bash. Vytvorte súbor Bash pomocou nasledujúceho skriptu, ktorý spustí cyklus „for“ 10 000-krát a po 1000-krát vytlačí číslo. Táto úloha sa vykonáva paralelne pomocou cyklu „for“.







#!/bin/bash

# Opakujte slučku, kým nedosiahne hodnotu 10 000

pre val v ` nasl 0 1000 10 000 ` ;

robiť

#Vytlačte každé 1000. číslo

ozvena $val

hotový

Po vykonaní skriptu sa zobrazí nasledujúci výstup. Vo výstupe je vytlačených 10 čísel od 0 do 10 000:



  p3



Príklad 2: Spustite paralelné úlohy pomocou vnorenej slučky „For“.

Vytvorte súbor Bash pomocou nasledujúceho skriptu, ktorý spúšťa vnorenú slučku „for“, ktorá generuje sériové číslo pomocou abecedných znakov od „A“ po „C“ a číslic 1 až 3. V prvej iterácii vonkajšej slučky a po dokončenie iterácie vnútornej slučky, „A1. CodeIgniter“, „A2. Laravel“ a „A3. CakePHP“ sú vytlačené. V druhej iterácii vonkajšej slučky a po dokončení iterácie vnútornej slučky sa „B1. Oracle“, „B2. MySQL“ a „B3. SQL“ sú vytlačené. V tretej iterácii vonkajšej slučky a po dokončení iterácie vnútornej slučky sa „C1. CSS“, „C2. JQuery“ a „C3. JavaScript“ sú vytlačené.





#Vonkajšia slučka

pre alfa v { A..C }

robiť

#Vnútorná slučka

pre číslo v { 1 .. 3 }

robiť

# Vytlačte výstup na základe podmienky

ak [ $alpha == 'A' ] ; potom

arrayList = ( 'CodeIgniter' 'Laravel' 'CakePHP' )

elif [ $alpha == 'B' ] ; potom

arrayList = ( 'Oracle' 'MySQL' 'SQL' )

elif [ $alpha == 'C' ] ; potom

arrayList = ( 'CSS' 'JQuery' 'JavaScript' )

byť

ozvena ' $alpha $číslo . ${arrayList[$number-1]} '

hotový

hotový

Po vykonaní skriptu sa zobrazí nasledujúci výstup:



Príklad 3: Spustite paralelné úlohy pomocou slučky „For“ a príkazu „Wait“.

Príkaz „wait“ je veľmi užitočný príkaz Bash, ktorý sa používa na čakanie, kým jedna úloha dokončí úlohu, keď je spustených viacero úloh. Ak je spustených menej úloh, príkaz „wait“ spustí novú úlohu asynchrónne. Vytvorte súbor Bash pomocou nasledujúceho skriptu, ktorý spustí úlohu na pozadí vo vnútri vnorenej slučky „for“. Príkaz „wait“ sa používa na čakanie na dokončenie všetkých podriadených procesov. Príkazy „dátum“ a „spánok“ sa vykonávajú ako proces na pozadí.

#Vonkajšia slučka

pre i v { 1 .. 2 }

robiť

#Vnútorná slučka

pre j v { 1 .. 3 }

robiť

ak test ' $(pracovné miesta | wc -l) ' -ge 2 ; potom

počkaj -n

byť

#Proces na pozadí

{

dátum

spať 1

} &

hotový

hotový

Po vykonaní skriptu sa zobrazí nasledujúci výstup. Aktuálny dátum a čas sa vytlačí 6-krát z procesu na pozadí, aby sa opakovali vnorené slučky „for“ 2×3=6-krát:

Príklad 4: Rozdiely medzi sekvenčnými a paralelnými chodmi

Vytvorte súbor Bash pomocou nasledujúceho skriptu, ktorý zobrazuje rozdiely medzi sekvenčným a paralelným spustením. Funkcia prn_char() je v skripte definovaná na tlač piatich znakov s trvaním 0,5 sekundy. Ďalej sa prvá slučka „for“ používa na postupné spustenie funkcie prn_char(). Druhá slučka „for“ sa používa na paralelné spustenie funkcie prn_char().

#Definujte funkciu na tlač 5 znakov s trvaním 0,5 sekundy

prn_char ( ) {

pre c v Ahoj; robiť

spať 0,5 ;

ozvena -n $c ;

hotový

ozvena

}

# Spustite funkciu pomocou cyklu for postupne

pre von v { 1 .. 3 } ; robiť

prn_char ' $out '

hotový

#Spustite funkciu pomocou slučky for paralelne

pre von v { 1 .. 3 } ; robiť

prn_char ' $out ' &

hotový


Po vykonaní skriptu sa zobrazí nasledujúci výstup. Rozdiel medzi sekvenčným a paralelným chodom je zobrazený na výstupe. Tu sa všetky znaky cyklu „for“ funkcie prn_char() vytlačia naraz v sekvenčnom chode a každý znak sa v paralelnom behu vytlačí trikrát:

  p4

Záver

Spustenie paralelných úloh pomocou slučky „for“ je potrebné na mnohé účely programovania. Metódy spúšťania paralelných úloh pomocou cyklu „for“ sú uvedené v tomto návode.