龙空技术网

在Python中,怎样实现进程间的通信?

Python编程 83

前言:

当前我们对“python 进程通信”大概比较着重,姐妹们都想要知道一些“python 进程通信”的相关知识。那么小编也在网络上汇集了一些有关“python 进程通信””的相关文章,希望大家能喜欢,姐妹们一起来学习一下吧!

在 Python 中,可以使用多种方式实现进程间的通信,其中包括以下几种主要方法:

管道(Pipe):使用 multiprocessing.Pipe() 函数创建管道,它返回连接的两个端点,每个端点都有自己的 send() 和 recv() 方法,可以通过这些方法发送和接收数据。

from multiprocessing import Process, Pipedef sender(conn):    conn.send("Hello from sender")def receiver(conn):    msg = conn.recv()    print("Message received:", msg)if __name__ == "__main__":    parent_conn, child_conn = Pipe()    p1 = Process(target=sender, args=(child_conn,))    p2 = Process(target=receiver, args=(parent_conn,))    p1.start()    p2.start()    p1.join()    p2.join()
队列(Queue):使用 multiprocessing.Queue() 创建进程安全的队列,可以在多个进程之间共享数据。
from multiprocessing import Process, Queuedef worker(queue):    queue.put("Hello from worker")if __name__ == "__main__":    q = Queue()    p = Process(target=worker, args=(q,))    p.start()    p.join()    print("Message received:", q.get())
共享内存(Shared Memory):使用 multiprocessing.Value 和 multiprocessing.Array 创建共享内存,多个进程可以访问同一块内存空间。
from multiprocessing import Process, Valuedef counter(counter_value):    for _ in range(5):        counter_value.value += 1if __name__ == "__main__":    counter_value = Value("i", 0)    p1 = Process(target=counter, args=(counter_value,))    p2 = Process(target=counter, args=(counter_value,))    p1.start()    p2.start()    p1.join()    p2.join()    print("Counter value:", counter_value.value)
套接字(Socket):使用套接字实现进程间通信,可以使用 socket 或 multiprocessing.connection 模块创建套接字。
import socketimport multiprocessingdef sender(conn):    # 创建套接字    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        # 绑定套接字到本地地址    s.bind(('127.0.0.1', 12345))        # 监听连接    s.listen(5)        # 等待客户端连接    conn, addr = s.accept()    print('Connected by', addr)        # 发送消息    conn.sendall(b'Hello, world')        # 关闭连接    conn.close()def receiver(conn):    # 创建套接字    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        # 连接到发送者    s.connect(('127.0.0.1', 12345))        # 接收消息    data = s.recv(1024)    print('Received', repr(data))        # 关闭连接    s.close()if __name__ == "__main__":    # 创建进程    p1 = multiprocessing.Process(target=sender, args=('',))    p2 = multiprocessing.Process(target=receiver, args=('',))        # 启动进程    p1.start()    p2.start()    # 等待进程结束    p1.join()    p2.join()

以上是常见的几种方法,可以根据具体需求选择合适的通信方式。

标签: #python 进程通信