Maison >développement back-end >Tutoriel Python >Comment la bibliothèque multitraitement de Python peut-elle simplifier la communication interprocessus ?

Comment la bibliothèque multitraitement de Python peut-elle simplifier la communication interprocessus ?

DDD
DDDoriginal
2024-10-29 11:18:021025parcourir

How can Python's multiprocessing library simplify Interprocess Communication?

Communication interprocessus en Python

La communication interprocessus (IPC) permet la communication entre plusieurs processus Python en cours d'exécution. Explorer diverses options, telles que l’utilisation de canaux nommés, de services dbus et de sockets, peut s’avérer difficile. Cet article présente une solution robuste et de niveau supérieur utilisant la bibliothèque multitraitement.

Utilisation de la bibliothèque multitraitement

La bibliothèque multitraitement offre un moyen pratique et efficace d'implémenter IPC en Python. Il fournit des auditeurs et des clients qui encapsulent des sockets et vous permettent d'échanger directement des objets Python.

Écoute des messages

Pour créer un processus d'écoute, utilisez la classe Listener :

<code class="python">from multiprocessing.connection import Listener

address = ('localhost', 6000)
listener = Listener(address, authkey=b'secret password')
conn = listener.accept()
print('connection accepted from', listener.last_accepted)</code>

L'écouteur attend sur une adresse IP et un port spécifiés les connexions entrantes. Une fois la connexion établie, un objet Connection (conn) est renvoyé.

Envoi de messages

Pour envoyer des messages sous forme d'objets Python, utilisez la classe Client :

<code class="python">from multiprocessing.connection import Client

address = ('localhost', 6000)
conn = Client(address, authkey=b'secret password')
conn.send('close')
conn.close()</code>

La classe Client se connecte à l'adresse spécifiée et peut envoyer des objets arbitraires au processus d'écoute.

Exemple Implémentation

Considérons un cas d'utilisation simple où un processus (listener.py) écoute les messages et l'autre (client.py) envoie un message.

listener.py :

<code class="python">from multiprocessing.connection import Listener

listener = Listener(('localhost', 6000), authkey=b'secret password')
conn = listener.accept()

message = conn.recv()
if message == 'close':
    conn.close()
    listener.close()
    exit(0)
else:
    conn.close()
    listener.close()
    exit(1)</code>

client.py :

<code class="python">from multiprocessing.connection import Client

conn = Client(('localhost', 6000), authkey=b'secret password')
conn.send('close')
conn.close()</code>

Lorsque vous exécutez l'écouteur .py puis client.py, le processus d'écoute recevra le message et quittera avec le code retour 0, indiquant le succès. Si un message non valide est envoyé, l'écouteur se terminera avec un code retour différent de zéro, indiquant un échec.

Cet exemple démontre la facilité et la flexibilité de l'utilisation de la bibliothèque multitraitement pour la communication interprocessus en Python. Il fournit une abstraction de niveau supérieur sur les sockets, vous permettant d'envoyer et de recevoir de manière transparente des objets Python entre les processus.

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