Locuri de muncă paralele Bash folosind bucla For

Locuri De Munca Paralele Bash Folosind Bucla For



Există multe modalități în Linux de a rula mai multe comenzi sau scripturi Bash în paralel. Una dintre modalități este să utilizați o buclă „for” în scriptul Bash pentru a rula un job paralel. Această buclă este foarte utilă pentru a rula joburile paralele folosind comanda „seq”. Diferitele moduri de executare a joburilor paralele folosind o buclă „for” sunt prezentate în acest tutorial.

Diferite exemple de locuri de muncă paralele

Diferitele moduri de a rula joburile paralele folosind bucla „for” sunt prezentate în această parte a tutorialului.

Exemplul 1: Rulați lucrări paralele folosind bucla „For”.

Utilizarea buclei „for” este modalitatea mai simplă de a efectua lucrări paralele în scriptul Bash. Creați un fișier Bash cu următorul script care rulează bucla „for” de 10000 de ori și imprimați un număr după o iterație de 1000 de ori. Această sarcină este realizată în paralel folosind bucla „for”.







#!/bin/bash

#Repetați bucla până ajunge la 10000

pentru val în ` secv 0 1000 10000 ` ;

do

#Tipărește fiecare al 1000-lea număr

ecou $val

Terminat

Următoarea ieșire apare după executarea scriptului. Există 10 numere între 0 și 10000 care sunt tipărite în rezultat:



  p3



Exemplul 2: Rulați lucrările paralele folosind bucla „For” imbricată

Creați un fișier Bash cu următorul script care rulează bucla imbricată „for” care generează numărul de serie folosind caracterele alfabetice de la „A” la „C” și numerele de la 1 la 3. În prima iterație a buclei exterioare și după completând iterația buclei interioare, „A1. CodeIgniter”, „A2. Laravel” și „A3. CakePHP” sunt tipărite. În a doua iterație a buclei exterioare și după finalizarea iterației buclei interioare, „B1. Oracle”, „B2. MySQL” și „B3. SQL” sunt tipărite. În a treia iterație a buclei exterioare și după finalizarea iterației buclei interioare, „C1. CSS”, „C2. JQuery” și „C3. JavaScript” sunt tipărite.





#Bucla exterioară

pentru alfa în { A..C }

do

#Bucla interioară

pentru număr în { 1 .. 3 }

do

#Tipărește rezultatul în funcție de condiție

dacă [ $alfa == 'A' ] ; apoi

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

elif [ $alfa == „B” ] ; apoi

arrayList = ( 'Oracol' „MySQL” 'SQL' )

elif [ $alfa == „C” ] ; apoi

arrayList = ( „CSS” „JQuery” „JavaScript” )

fi

ecou ' $alfa $numar . ${arrayList[$number-1]} '

Terminat

Terminat

Următoarea ieșire apare după executarea scriptului:



Exemplul 3: Rulați lucrări paralele folosind bucla „For” și comanda „Așteptați”.

Comanda „așteptați” este o comandă foarte utilă a lui Bash, care este folosită pentru a aștepta ca un job să finalizeze sarcina atunci când rulează mai multe joburi. Dacă rulează mai puține joburi, comanda „așteptați” pornește o nouă lucrare în mod asincron. Creați un fișier Bash cu următorul script care rulează un job de fundal în bucla „for” imbricată. Comanda „wait” este folosită pentru a aștepta finalizarea tuturor proceselor copil. Comenzile „date” și „sleep” sunt executate ca proces de fundal.

#Bucla exterioară

pentru i în { 1 .. 2 }

do

#Bucla interioară

pentru j în { 1 .. 3 }

do

dacă Test ' $(locuri de muncă | wc -l) ' -GE 2 ; apoi

aștepta -n

fi

#Proces de fundal

{

Data

dormi 1

} &

Terminat

Terminat

Următoarea ieșire apare după executarea scriptului. Data și ora curente sunt tipărite de 6 ori din procesul de fundal pentru a repeta buclele „for” imbricate de 2×3=6 ori:

Exemplul 4: Diferențele dintre rulajele secvenţiale și paralele

Creați un fișier Bash cu următorul script care arată diferențele dintre rularea secvențială și rularea paralelă. Funcția prn_char() este definită în script pentru a imprima cinci caractere cu o durată de 0,5 secunde. În continuare, prima buclă „for” este folosită pentru a rula secvenţial funcţia prn_char(). A doua buclă „for” este folosită pentru a rula funcția prn_char() în paralel.

#Definiți o funcție pentru a imprima 5 caractere cu o durată de 0,5 secunde

prn_char ( ) {

pentru c în Buna ziua; do

dormi 0,5 ;

ecou -n $c ;

Terminat

ecou

}

# Rulați funcția folosind bucla for secvenţial

pentru afară în { 1 .. 3 } ; do

prn_char ' $out '

Terminat

# Rulați funcția folosind bucla for în paralel

pentru afară în { 1 .. 3 } ; do

prn_char ' $out ' &

Terminat


Următoarea ieșire apare după executarea scriptului. Diferența dintre rularea secvențială și cea paralelă este afișată în ieșire. Aici, toate caracterele buclei „for” a funcției prn_char() sunt tipărite la un moment dat în rularea secvențială și fiecare caracter este tipărit de trei ori în rularea paralelă:

  p4

Concluzie

Rularea joburilor paralele folosind bucla „for” este necesară pentru multe scopuri de programare. Metodele de rulare a joburilor paralele folosind bucla „for” sunt prezentate în acest tutorial.