77 votes

Multithreading dans Bash

Je voudrais introduire la fonction multithreading dans mon shell script.

J'ai un script qui appelle la fonction read_cfg() avec des arguments différents. Chacun de ces appels de fonction est indépendant.

Serait-il possible d'instancier ces appels de fonction (pas scripts) en parallèle. S'il vous plaît, dites-moi comment nous pouvons réaliser cela ?

162voto

Martin Points 13951

Bien sûr, il suffit d'ajouter & après la commande :

read_cfg cfgA &
read_cfg cfgB &
read_cfg cfgC &
wait

tous ces travaux seront alors exécutés simultanément en arrière-plan. L'option wait La commande attendra ensuite que tous les travaux soient terminés.

Chaque commande s'exécutera dans un processus distinct, donc techniquement ce n'est pas du "multithreading", mais je pense que cela résout votre problème.

26voto

tnorgd Points 450

Vous pouvez exécuter plusieurs copies de votre script en parallèle, chaque copie pour des données d'entrée différentes, par exemple pour traiter tous les fichiers *.cfg sur 4 cœurs :

    ls *.cfg | xargs -P 4 -n 1 read_cfg.sh

Le script read_cfg.sh script ne prend qu'un seul paramètre (comme imposé par -n)

21voto

mouviciel Points 36624

Le contrôle des tâches Bash implique des processus multiples, et non des threads multiples.

Vous pouvez exécuter une commande en arrière-plan avec la commande & suffixe.

Vous pouvez attendre l'achèvement d'une commande en arrière-plan avec l'option wait commandement.

Vous pouvez exécuter plusieurs commandes en parallèle en les séparant par le symbole | . Ceci fournit également un mécanisme de synchronisation, puisque le stdout d'une commande à gauche de | est connecté au stdin de la commande à droite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X