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 obtenir une véritable exécution de processus Bash parallèle en Python sans compter sur les threads ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-27 05:40:03265parcourir

How to Achieve True Parallel Bash Process Execution in Python Without Relying on 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn