Bash Parallel Jobs naudojant For Loop

Bash Parallel Jobs Naudojant For Loop



„Linux“ egzistuoja daug būdų, kaip lygiagrečiai paleisti kelias komandas arba „Bash“ scenarijus. Vienas iš būdų yra naudoti „for“ kilpą „Bash“ scenarijuje lygiagrečiam darbui vykdyti. Ši kilpa yra labai naudinga paleisti lygiagrečias užduotis naudojant komandą „seq“. Šiame vadove parodyti skirtingi lygiagrečių užduočių vykdymo būdai naudojant „for“ kilpą.

Įvairūs lygiagrečių darbų pavyzdžiai

Šioje pamokos dalyje parodyti skirtingi lygiagrečių užduočių vykdymo būdai naudojant kilpą „for“.

1 pavyzdys: Vykdykite lygiagrečius darbus naudodami kilpą „For“.

„For“ ciklo naudojimas yra paprastesnis būdas atlikti lygiagrečias užduotis „Bash“ scenarijuje. Sukurkite „Bash“ failą naudodami šį scenarijų, kuris paleidžia „for“ kilpą 10 000 kartų, ir atspausdinkite skaičių po 1000 kartų. Ši užduotis atliekama lygiagrečiai naudojant „for“ kilpą.







#!/bin/bash

#Pakartokite kilpą, kol pasieksite 10 000

dėl val in ` sek 0 1000 10 000 ` ;

daryti

#Spausdinkite kas 1000-ąjį skaičių

aidas $val

padaryta

Įvykdžius scenarijų pasirodo ši išvestis. Išvestyje yra 10 skaičių nuo 0 iki 10 000:



  p3



2 pavyzdys: Vykdykite lygiagrečius darbus naudodami įdėtą „For“ kilpą

Sukurkite „Bash“ failą su šiuo scenarijumi, kuris paleidžia įdėtą „for“ kilpą, kuri generuoja serijos numerį naudodama abėcėlės simbolius nuo „A“ iki „C“ ir skaičius nuo 1 iki 3. Pirmoje išorinės kilpos iteracijoje ir po jos užbaigiant vidinės kilpos iteraciją „A1. CodeIgniter“, „A2. Laravel“ ir „A3. CakePHP“ yra atspausdinti. Antroje išorinės kilpos iteracijoje ir baigus vidinės kilpos iteraciją „B1. Oracle“, „B2. MySQL“ ir „B3. SQL“ atspausdinami. Trečiąja išorinės kilpos iteracija ir baigus vidinės kilpos iteraciją „C1. CSS“, „C2. JQuery“ ir „C3. JavaScript“ yra atspausdinti.





#Išorinė kilpa

dėl alfa in { A..C }

daryti

#Vidinė kilpa

dėl numerį in { 1 .. 3 }

daryti

#Spausdinkite išvestį pagal sąlygą

jeigu [ $alfa == 'A' ] ; tada

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

elifas [ $alfa == 'B' ] ; tada

arrayList = ( 'Orakulas' 'MySQL' 'SQL' )

elifas [ $alfa == 'C' ] ; tada

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

būti

aidas $alfa $numeris . ${arrayList[$number-1]}

padaryta

padaryta

Įvykdžius scenarijų pasirodo ši išvestis:



3 pavyzdys: Vykdykite lygiagrečius darbus naudodami 'For' kilpą ir 'Wait' komandą

Komanda „laukti“ yra labai naudinga „Bash“ komanda, kuri naudojama laukti, kol viena užduotis užbaigs užduotį, kai vykdomos kelios užduotys. Jei vykdoma mažiau užduočių, komanda „laukti“ paleidžia naują užduotį asinchroniškai. Sukurkite „Bash“ failą naudodami šį scenarijų, kuris paleidžia foninę užduotį įdėtoje „for“ kilpoje. Komanda „laukti“ naudojama laukti, kol bus baigti visi antriniai procesai. „Data“ ir „miego“ komandos vykdomos kaip foninis procesas.

#Išorinė kilpa

dėl i in { 1 .. 2 }

daryti

#Vidinė kilpa

dėl j in { 1 .. 3 }

daryti

jeigu bandymas $(darbo vietos | wc -l) -ge 2 ; tada

laukti -n

būti

#Foninis procesas

{

data

miegoti 1

} &

padaryta

padaryta

Įvykdžius scenarijų pasirodo ši išvestis. Dabartinė data ir laikas atspausdinami 6 kartus iš foninio proceso, kad būtų kartojamos įdėtos „for“ kilpos 2 × 3 = 6 kartus:

4 pavyzdys: nuoseklių ir lygiagrečių važiavimų skirtumai

Sukurkite „Bash“ failą naudodami šį scenarijų, kuris parodo skirtumus tarp nuoseklaus ir lygiagretaus paleidimo. Funkcija prn_char() yra apibrėžta scenarijuje, kad būtų spausdinami penki simboliai, kurių trukmė yra 0,5 sekundės. Tada pirmoji „for“ kilpa naudojama funkcijai prn_char () paleisti nuosekliai. Antroji „for“ kilpa naudojama funkcijai prn_char () paleisti lygiagrečiai.

#Apibrėžkite funkciją, skirtą 5 simbolių spausdinimui 0,5 sekundės trukme

prn_char ( ) {

dėl c in Sveiki; daryti

miegoti 0.5 ;

aidas -n $c ;

padaryta

aidas

}

# Paleiskite funkciją naudodami for ciklus

dėl išeiti in { 1 .. 3 } ; daryti

prn_char $out

padaryta

# Lygiagrečiai paleiskite funkciją naudodami for ciklus

dėl išeiti in { 1 .. 3 } ; daryti

prn_char $out &

padaryta


Įvykdžius scenarijų pasirodo ši išvestis. Skirtumas tarp nuoseklaus ir lygiagrečio paleidimo rodomas išvestyje. Čia visi funkcijos prn_char() ciklo „for“ simboliai spausdinami vienu metu nuosekliame paleidime, o kiekvienas simbolis lygiagrečiai spausdinamas tris kartus:

  p4

Išvada

Lygiagrečių užduočių vykdymas naudojant „for“ kilpą reikalingas daugeliui programavimo tikslų. Šiame vadove parodyti lygiagrečių užduočių vykdymo metodai naudojant „for“ kilpą.