Bash Parallel Jobs Gamit ang Para sa Loop

Bash Parallel Jobs Gamit Ang Para Sa Loop



Maraming paraan ang umiiral sa Linux para magpatakbo ng maraming command o Bash script nang magkatulad. Ang isa sa mga paraan ay ang paggamit ng loop na 'para sa' sa script ng Bash upang magpatakbo ng isang parallel na trabaho. Ang loop na ito ay lubhang kapaki-pakinabang upang patakbuhin ang mga parallel na trabaho gamit ang command na 'seq'. Ang iba't ibang paraan ng pagsasagawa ng mga parallel na trabaho gamit ang 'for' loop ay ipinapakita sa tutorial na ito.

Iba't ibang Halimbawa ng Mga Parallel na Trabaho

Ang iba't ibang paraan ng pagpapatakbo ng mga parallel na trabaho gamit ang 'para sa' loop ay ipinapakita sa bahaging ito ng tutorial.

Halimbawa 1: Patakbuhin ang Parallel Jobs Gamit ang 'Para sa' Loop

Ang paggamit ng 'para sa' loop ay ang mas simpleng paraan upang maisagawa ang mga parallel na trabaho sa Bash script. Gumawa ng Bash file na may sumusunod na script na nagpapatakbo ng 'para sa' loop nang 10000 beses at mag-print ng numero pagkatapos ng pag-ulit ng 1000 beses. Ang gawaing ito ay ginagawa nang magkatulad gamit ang 'para sa' loop.







#!/bin/bash

#Ulitin ang loop hanggang umabot sa 10000

para sa val sa ` seq 0 1000 10000 ` ;

gawin

#Print bawat ika-1000 na numero

echo $val

tapos na

Ang sumusunod na output ay lilitaw pagkatapos isagawa ang script. Mayroong 10 numero sa pagitan ng 0 at 10000 na naka-print sa output:



  p3



Halimbawa 2: Patakbuhin ang Mga Parallel na Trabaho Gamit ang Nested 'Para sa' Loop

Gumawa ng Bash file na may sumusunod na script na nagpapatakbo ng nested 'for' loop na bumubuo ng serial number gamit ang mga alphabetic na character mula 'A' hanggang 'C' at ang mga numero 1 hanggang 3. Sa unang pag-ulit ng panlabas na loop at pagkatapos pagkumpleto ng pag-ulit ng panloob na loop, 'A1. CodeIgniter', 'A2. Laravel', at 'A3. CakePHP” ay naka-print. Sa pangalawang pag-ulit ng panlabas na loop at pagkatapos makumpleto ang pag-ulit ng panloob na loop, 'B1. Oracle', 'B2. MySQL', at 'B3. SQL' ay naka-print. Sa ikatlong pag-ulit ng panlabas na loop at pagkatapos makumpleto ang pag-ulit ng panloob na loop, 'C1. CSS', 'C2. JQuery', at 'C3. JavaScript' ay naka-print.





#Outer loop

para sa alpha sa { A..C }

gawin

#Inner loop

para sa numero sa { 1 .. 3 }

gawin

#I-print ang output batay sa kundisyon

kung [ $alpha == 'A' ] ; pagkatapos

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

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

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

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

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

maging

echo ' $alpha $number . ${arrayList[$number-1]} '

tapos na

tapos na

Ang sumusunod na output ay lilitaw pagkatapos isagawa ang script:



Halimbawa 3: Patakbuhin ang Parallel Jobs Gamit ang 'For' Loop at 'Wait' Command

Ang command na 'wait' ay isang napaka-kapaki-pakinabang na command ng Bash na ginagamit upang maghintay ng isang trabaho upang makumpleto ang gawain kapag maraming trabaho ang tumatakbo. Kung mas kaunting mga trabaho ang tumatakbo, ang command na 'wait' ay magsisimula ng bagong trabaho nang asynchronous. Gumawa ng Bash file na may sumusunod na script na nagpapatakbo ng background job sa loob ng nested 'for' loop. Ang command na 'wait' ay ginagamit para sa paghihintay upang makumpleto ang lahat ng mga proseso ng bata. Ang 'petsa' at 'sleep' na mga utos ay isinasagawa bilang proseso sa background.

#Outer loop

para sa i sa { 1 .. 2 }

gawin

#Inner loop

para sa j sa { 1 .. 3 }

gawin

kung pagsusulit ' $(mga trabaho | wc -l) ' -ge 2 ; pagkatapos

maghintay -n

maging

#Proseso sa background

{

petsa

matulog 1

} at

tapos na

tapos na

Ang sumusunod na output ay lilitaw pagkatapos isagawa ang script. Ang kasalukuyang petsa at oras ay naka-print ng 6 na beses mula sa proseso sa background upang ulitin ang mga nested na 'para sa' na mga loop para sa 2 × 3 = 6 na beses:

Halimbawa 4: Mga Pagkakaiba sa Pagitan ng Sequential at Parallel Run

Gumawa ng Bash file na may sumusunod na script na nagpapakita ng mga pagkakaiba sa pagitan ng sequential run at parallel run. Ang prn_char() function ay tinukoy sa script upang mag-print ng limang character na may 0.5 segundong tagal. Susunod, ang unang 'para sa' loop ay ginagamit upang patakbuhin ang prn_char() function nang sunud-sunod. Ang pangalawang 'para sa' loop ay ginagamit upang patakbuhin ang prn_char() function nang magkatulad.

#Tumukoy ng function para mag-print ng 5 character na may tagal na 0.5 segundo

prn_char ( ) {

para sa c sa Kamusta; gawin

matulog 0.5 ;

echo -n $c ;

tapos na

echo

}

#Patakbuhin ang function gamit ang para sa loop nang sunud-sunod

para sa palabas sa { 1 .. 3 } ; gawin

prn_char ' $out '

tapos na

#Patakbuhin ang function gamit ang parallel na loop

para sa palabas sa { 1 .. 3 } ; gawin

prn_char ' $out ' at

tapos na


Ang sumusunod na output ay lilitaw pagkatapos isagawa ang script. Ang pagkakaiba sa pagitan ng sequential run at parallel run ay ipinapakita sa output. Dito, ang lahat ng mga character ng 'for' loop ng prn_char() function ay naka-print sa isang pagkakataon sa sequential run at ang bawat character ay naka-print nang tatlong beses sa parallel run:

  p4

Konklusyon

Ang pagpapatakbo ng mga parallel na trabaho gamit ang 'for' loop ay kinakailangan para sa maraming layunin ng programming. Ang mga paraan ng pagpapatakbo ng mga parallel na trabaho gamit ang 'para sa' loop ay ipinapakita sa tutorial na ito.