Maison >développement back-end >Tutoriel Python >Comment la bibliothèque multitraitement de Python peut-elle simplifier la communication interprocessus ?
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.
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.
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é.
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.
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!