Maison  >  Article  >  développement back-end  >  Comment utiliser le module multitraitement pour la communication inter-processus dans Python 3.x

Comment utiliser le module multitraitement pour la communication inter-processus dans Python 3.x

WBOY
WBOYoriginal
2023-08-01 12:39:241331parcourir

Comment utiliser le module multitraitement pour la communication inter-processus dans Python 3.x

Avec le développement de la technologie informatique, nous devons souvent effectuer plusieurs tâches en même temps en programmation. Pour mieux tirer parti des processeurs multicœurs, le module multitraitement de Python fournit un ensemble d'outils simples mais puissants pour créer des programmes simultanés. Le module multitraitement nous permet d'utiliser plusieurs processus en Python, qui peuvent s'exécuter simultanément et communiquer en cas de besoin. Cet article expliquera comment utiliser le module multitraitement pour la communication inter-processus et fournira des exemples de code correspondants.

  1. Utilisation de Queue pour la communication inter-processus
    Le module multitraitement fournit une classe Queue pour transmettre des données entre les processus. Voici un exemple d'utilisation de Queue pour la communication inter-processus :
from multiprocessing import Process, Queue

def worker(q):
    # 从队列中获取数据并处理
    while True:
        data = q.get()
        if data is None:
            break
        # 处理数据
        print("Worker got:", data)

if __name__ == '__main__':
    # 创建一个队列
    q = Queue()

    # 创建多个进程
    processes = []
    for i in range(3):
        p = Process(target=worker, args=(q,))
        processes.append(p)
        p.start()

    # 往队列中放入数据
    for i in range(10):
        q.put(i)

    # 添加结束标记到队列中
    for i in range(3):
        q.put(None)

    # 等待进程结束
    for p in processes:
        p.join()

Dans le code ci-dessus, nous avons créé une fonction de travail qui récupère les données de la file d'attente via Queue et les traite. Ensuite, nous avons créé trois processus, chaque processus exécutera la fonction de travail. Dans le processus principal, nous mettons certaines données dans la file d'attente et ajoutons un marqueur de fin. Enfin, nous attendons la fin de tous les processus.

  1. Utilisez Pipe pour la communication inter-processus
    En plus d'utiliser Queue, le module multitraitement fournit également la classe Pipe pour créer des canaux bidirectionnels entre les processus. Voici un exemple d'utilisation de Pipe pour la communication inter-processus :
from multiprocessing import Process, Pipe

def worker(conn):
    # 接收数据并打印
    data = conn.recv()
    print("Worker got:", data)

    # 发送数据回主进程
    conn.send("Hello from worker")

    # 关闭连接
    conn.close()

if __name__ == '__main__':
    # 创建一个管道
    parent_conn, child_conn = Pipe()

    # 创建子进程
    p = Process(target=worker, args=(child_conn,))
    p.start()

    # 发送数据到子进程
    parent_conn.send("Hello from main process")

    # 接收子进程的返回数据
    data = parent_conn.recv()
    print("Main process got:", data)

    # 等待子进程结束
    p.join()

Dans le code ci-dessus, nous créons une fonction de travail qui reçoit les données envoyées par le processus principal via Pipe et les imprime. Ensuite, il renvoie un message au processus principal. Dans le processus principal, nous créons un canal et transmettons l'un des ports au processus enfant. Ensuite, nous envoyons un message au processus enfant et recevons les données de retour du processus enfant. Enfin, nous attendons la fin du processus enfant.

Résumé :
Il est très simple d'utiliser le module multitraitement pour la communication inter-processus. Il fournit deux classes, Queue et Pipe, pour implémenter la transmission de données entre les processus. La classe Queue est utilisée pour la communication unidirectionnelle, en transmettant des données entre les processus via les méthodes put et get. La classe Pipe est utilisée pour la communication bidirectionnelle entre les processus via les méthodes send et recv. Que ce soit en utilisant Queue ou Pipe, nous pouvons facilement transférer des données entre différents processus, réalisant ainsi une exécution simultanée de tâches et une communication inter-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