Maison >développement back-end >Tutoriel Python >Comment obtenir une véritable exécution de processus Bash parallèle en Python sans compter sur les threads ?
Comment générer des processus Bash parallèles avec les modules de thread et de sous-processus de Python ?
Question originale :
Comment puis-je utiliser les modules de threading et de sous-processus de Python pour créer des processus bash parallèles ? L'exécution consécutive se produit au lieu de l'exécution parallèle lorsque les threads sont lancés comme décrit dans cette réponse Stack Overflow.
Réponse :
Contrairement à l'hypothèse initiale, les threads ne sont pas nécessaires pour exécution parallèle du sous-processus bash. Les techniques suivantes offrent diverses options :
Exécution directe (sans threads) :
<code class="python">from subprocess import Popen commands = ['date; ls -l; sleep 1; date', ...] processes = [Popen(cmd, shell=True) for cmd in commands]</code>
Commandes simultanées limitées utilisant des threads avec multiprocessing.dummy.Pool :
<code class="python">from functools import partial from multiprocessing.dummy import Pool from subprocess import call pool = Pool(2) for i, returncode in enumerate(pool.imap(partial(call, shell=True), commands)): ...</code>
Limiter les processus enfants simultanés sans pool de processus :
<code class="python">from subprocess import Popen from itertools import islice max_workers = 2 processes = (Popen(cmd, shell=True) for cmd in commands) running_processes = list(islice(processes, max_workers)) while running_processes: ...</code>
Remarque pour les systèmes Unix :
Sur les plateformes Unix, évitez la boucle occupée en bloquant sur os.waitpid(-1, 0) pour attendre la fin de tout processus enfant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!