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
Libérer: 2024-10-27 05:40:03
original
271 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal