Traitement parallèle ou threading dans les scripts Shell
Je suis en train d'écrire un script en shell dans lequel une commande est en cours d'exécution et de prendre 2 min. à chaque fois. Aussi, il n'y a rien que nous pouvons faire avec cela. Mais si je veux exécuter cette commande de 100 fois dans le script puis le temps total serait de 200 min. et cela va créer un gros problème. Personne n'a envie d'attendre pendant 200 min. Ce que je veux, c'est d'exécuter tous les 100 commandes parallèle de sorte que le résultat viendra en 2min ou peut-être un peu plus de temps, mais ne pas prendre 200 min.
il sera apprécié, si tout corps peut m'aider sur ce point en aucune façon.
source d'informationauteur Prince Garg
Vous devez vous connecter pour publier un commentaire.
GNU Parallèle est ce que vous voulez, sauf si vous voulez réinventer la roue. Voici un peu plus détaillée exemplesmais à court de celui-ci:
Cela n'est possible que si vous avez 200 processeurs sur votre système.
Il n'y a pas d'électricité/de commande dans le script shell pour exécuter des commandes en parallèle. Ce que vous pouvez faire est d'exécuter votre commande en arrière-plan:
Avec
&
(arrière-plan), chaque exécution est prévue dès que possible. Mais cela ne garantit pas que votre code sera exécuté en moins de 200 min. Il dépend du nombre de processeurs sont il sur votre système.Si vous ne disposez que d'un processeur et de chaque exécution de la commande (qui prend 2min) est en train de faire quelques calculs pour 2 min, alors le processeur est en train de faire un peu de travail, sens il n'y a pas de cycles perdu. Dans ce cas, l'exécution des commandes en parallèle ne va pas aider, car, il n'y a qu'un seul processeur qui n'est pas libre. Ainsi, le processus sera juste à attendre leur tour pour être exécuté.
Si vous avez plus d'un processeurs, la méthode ci-dessus (pour la boucle) pourraient aider à réduire le temps d'exécution total.
@KingsIndian dit, vous pouvez tâches en arrière-plan, qui leur permet de s'exécuter en parallèle. Au-delà de cela, vous pouvez également garder une trace d'eux par ID de processus:
Vous devriez également prendre un coup d'oeil à la fête de la documentation sur coprocesses.