Maison >développement back-end >Tutoriel Python >Comment puis-je connecter efficacement plusieurs processus en Python à l'aide de « subprocess.Popen » et quand dois-je éviter le piping ?

Comment puis-je connecter efficacement plusieurs processus en Python à l'aide de « subprocess.Popen » et quand dois-je éviter le piping ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-10 02:10:09809parcourir

How Can I Efficiently Connect Multiple Processes in Python Using `subprocess.Popen` and When Should I Avoid Piping?

Connexion de plusieurs processus avec des tuyaux à l'aide de subprocess.Popen

Pour exécuter des commandes shell complexes qui impliquent de canaliser plusieurs processus, le module de sous-processus de Python fournit des fonctionnalités pour créer et gérer des processus. Explorons comment utiliser subprocess.Popen à cette fin.

Piping AWK et processus de tri

La commande shell fournie :

echo "input data" | awk -f script.awk | sort > outfile.txt

dirige la sortie de echo "input data" dans le processus awk, dont la sortie est ensuite transmise au processus de tri. Pour simuler cela à l'aide de subprocess.Popen :

import subprocess

p_awk = subprocess.Popen(["awk","-f","script.awk"],
                         stdin=subprocess.PIPE,
                         stdout=subprocess.PIPE)
p_sort = subprocess.Popen(["sort"], stdin=p_awk.stdout, stdout=subprocess.PIPE)

stdout_data = p_sort.communicate(b"input data\n")[0]

Dans ce scénario, la commande echo est remplacée par une écriture directe dans le stdin de p_awk, et stdout_data contient la sortie triée.

Avantages de l'élimination awk

Bien que la solution acceptée atteigne l'objectif de piping, il est recommandé d'envisager une approche uniquement Python comme illustré ci-dessous :

import subprocess

awk_sort = subprocess.Popen("awk -f script.awk | sort > outfile.txt",
                           stdin=subprocess.PIPE, shell=True)

stdout_data = awk_sort.communicate(b"input data\n")[0]

Cette approche délègue la tuyauterie au shell, simplifiant ainsi le code du sous-processus. De plus, la réécriture du script awk en Python peut éliminer awk en tant que dépendance, ce qui entraîne un code plus rapide et plus simple.

Pourquoi éviter les tuyaux peut être bénéfique

Le canalisation de plusieurs processus introduit des complexités et des goulots d'étranglement potentiels. En éliminant les tuyaux et en utilisant Python pour toutes les étapes de traitement, vous bénéficiez des avantages suivants :

  • Base de code simplifiée, éliminant le besoin de comprendre et de gérer les tuyaux.
  • Efficacité améliorée grâce aux processus Python. données de manière séquentielle sans la surcharge de communication inter-processus.
  • Une plus grande flexibilité, vous permettant de modifier facilement les étapes de traitement des données sans avoir à gérer le pipeline gestion.

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