Tâches parallèles Bash à l'aide de la boucle For

Taches Paralleles Bash A L Aide De La Boucle For



De nombreuses façons existent sous Linux pour exécuter plusieurs commandes ou scripts Bash en parallèle. L'un des moyens consiste à utiliser une boucle 'for' dans le script Bash pour exécuter une tâche parallèle. Cette boucle est très utile pour exécuter les travaux parallèles à l'aide de la commande 'seq'. Les différentes manières d'exécuter les tâches parallèles à l'aide d'une boucle 'for' sont présentées dans ce didacticiel.

Différents exemples de tâches parallèles

Les différentes façons d'exécuter les travaux parallèles à l'aide de la boucle 'for' sont présentées dans cette partie du didacticiel.

Exemple 1 : Exécuter les tâches parallèles à l'aide de la boucle « For »

L'utilisation de la boucle 'for' est le moyen le plus simple d'effectuer les tâches parallèles dans le script Bash. Créez un fichier Bash avec le script suivant qui exécute la boucle 'for' 10000 fois et imprime un nombre après l'itération de 1000 fois. Cette tâche est effectuée en parallèle à l'aide de la boucle 'for'.







#!/bin/bash

#Itérer la boucle jusqu'à atteindre 10000

pour val dans ` suite 0 1000 10000 ` ;

faire

#Imprimez tous les 1000e numéros

écho $val

fait

La sortie suivante apparaît après l'exécution du script. Il y a 10 nombres entre 0 et 10000 qui sont imprimés dans la sortie :



  p3



Exemple 2 : Exécuter les tâches parallèles à l'aide de la boucle « For » imbriquée

Créez un fichier Bash avec le script suivant qui exécute la boucle 'for' imbriquée qui génère le numéro de série en utilisant les caractères alphabétiques de 'A' à 'C' et les chiffres de 1 à 3. Dans la première itération de la boucle externe et après complétant l'itération de la boucle interne, 'A1. CodeIgniter », « A2. Laravel », et « A3. CakePHP' sont imprimés. Dans la deuxième itération de la boucle externe et après avoir terminé l'itération de la boucle interne, 'B1. Oracle', 'B2. MySQL », et « B3. SQL” sont imprimés. Dans la troisième itération de la boucle externe et après avoir terminé l'itération de la boucle interne, 'C1. CSS », « C2. JQuery » et « C3. JavaScript” sont imprimés.





#Boucle extérieure

pour alpha dans { A..C }

faire

#Boucle intérieure

pour nombre dans { 1 .. 3 }

faire

#Imprimez la sortie en fonction de la condition

si [ $alpha == 'UN' ] ; alors

liste des tableaux = ( 'Code Igniter' 'Laravel' 'GâteauPHP' )

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

liste des tableaux = ( 'Oracle' 'MySQL' 'SQL' )

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

liste des tableaux = ( 'CSS' 'JQuery' 'JavaScript' )

être

écho ' $alpha $nombre . ${arrayList[$nombre-1]} '

fait

fait

Le résultat suivant s'affiche après l'exécution du script :



Exemple 3 : Exécuter les tâches parallèles à l'aide de la boucle « For » et de la commande « Wait »

La commande 'wait' est une commande très utile de Bash qui est utilisée pour attendre qu'un travail termine la tâche lorsque plusieurs travaux sont en cours d'exécution. Si moins de travaux sont en cours d'exécution, la commande « wait » démarre un nouveau travail de manière asynchrone. Créez un fichier Bash avec le script suivant qui exécute une tâche en arrière-plan dans la boucle 'for' imbriquée. La commande 'wait' est utilisée pour attendre la fin de tous les processus enfants. Les commandes « date » et « sleep » sont exécutées en arrière-plan.

#Boucle extérieure

pour je dans { 1 .. 2 }

faire

#Boucle intérieure

pour j dans { 1 .. 3 }

faire

si test ' $(emplois | wc -l) ' -ge 2 ; alors

attendez -n

être

#Processus en arrière-plan

{

date

dormir 1

} &

fait

fait

La sortie suivante apparaît après l'exécution du script. La date et l'heure actuelles sont imprimées 6 fois à partir du processus d'arrière-plan pour itérer les boucles 'for' imbriquées 2 × 3 = 6 fois :

Exemple 4 : Différences entre les exécutions séquentielles et parallèles

Créez un fichier Bash avec le script suivant qui montre les différences entre l'exécution séquentielle et l'exécution parallèle. La fonction prn_char() est définie dans le script pour imprimer cinq caractères d'une durée de 0,5 seconde. Ensuite, la première boucle 'for' est utilisée pour exécuter la fonction prn_char() de manière séquentielle. La deuxième boucle 'for' est utilisée pour exécuter la fonction prn_char() en parallèle.

#Définir une fonction pour imprimer 5 caractères avec une durée de 0,5 seconde

prn_char ( ) {

pour c dans Bonjour; faire

dormir 0,5 ;

écho -n $c ;

fait

écho

}

# Exécutez la fonction en utilisant la boucle for séquentiellement

pour dehors dans { 1 .. 3 } ; faire

prn_char ' $out '

fait

#Exécutez la fonction en utilisant la boucle for en parallèle

pour dehors dans { 1 .. 3 } ; faire

prn_char ' $out ' &

fait


La sortie suivante apparaît après l'exécution du script. La différence entre l'exécution séquentielle et l'exécution parallèle est indiquée dans la sortie. Ici, tous les caractères de la boucle 'for' de la fonction prn_char() sont imprimés à la fois dans l'exécution séquentielle et chaque caractère est imprimé trois fois dans l'exécution parallèle :

  p4

Conclusion

L'exécution des tâches parallèles à l'aide de la boucle 'for' est nécessaire à de nombreuses fins de programmation. Les méthodes d'exécution des travaux parallèles à l'aide de la boucle 'for' sont présentées dans ce didacticiel.