Maison > développement back-end > Tutoriel Python > Comment puis-je connecter efficacement plusieurs processus en Python, en évitant la tuyauterie complexe avec « subprocess.Popen » ?

Comment puis-je connecter efficacement plusieurs processus en Python, en évitant la tuyauterie complexe avec « subprocess.Popen » ?

Barbara Streisand
Libérer: 2024-12-11 09:24:11
original
744 Les gens l'ont consulté

How Can I Efficiently Connect Multiple Processes in Python, Avoiding Complex Piping with `subprocess.Popen`?

Connexion de plusieurs processus via des tuyaux avec subprocess.Popen

Dans ce scénario, vous souhaitez exécuter une commande shell à l'aide du module subprocess, en connectant trois commandes : echo, awk , trier et rediriger leur sortie vers un fichier de sortie.

echo "input data" | awk -f script.awk | sort > outfile.txt
Copier après la connexion

En utilisant subprocess.Popen, vous have :

import subprocess

p_awk = subprocess.Popen(["awk","-f","script.awk"],
                      stdin=subprocess.PIPE,
                      stdout=file("outfile.txt", "w"))
p_awk.communicate( "input data" )
Copier après la connexion

Bien que cette solution traite de la tuyauterie des awk à trier, elle néglige une considération importante :

Élimination des awk et des tuyaux

Comme suggéré dans la réponse acceptée, au lieu d'utiliser awk et pipes, il est plus avantageux de réécrire le script.awk en Python. Cela élimine awk, le pipeline et le besoin de gestion complexe de sous-processus.

Avantages du traitement Python uniquement

En effectuant toutes les opérations dans Python, vous gagnez plusieurs avantages :

  • Pas besoin d'étapes intermédiaires (par exemple, awk) qui ajoutent de la complexité et problèmes potentiels.
  • Élimination des goulots d'étranglement de concurrence potentiels introduits par les tuyaux.
  • Code simplifié, éliminant le besoin de gérer plusieurs sous-processus.
  • Utilisation d'un seul langage de programmation, réduisant la nécessité de comprendre différentes constructions linguistiques.
  • Clarté et maintenabilité améliorées du code.

Éviter les complexités des pipelines

La création de pipelines dans le shell implique plusieurs forks et manipulations de descripteurs de fichiers. Bien que cela soit possible en Python à l'aide d'API de bas niveau, il est beaucoup plus simple de déléguer la création du pipeline au shell en :

awk_sort = subprocess.Popen( "awk -f script.awk | sort > outfile.txt",
    stdin=subprocess.PIPE, shell=True )
awk_sort.communicate( b"input data\n" )
Copier après la connexion

Cette approche utilise le shell comme intermédiaire pour créer le pipeline, simplifiant ainsi le code Python.

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