在Python中,进程间通信(IPC)可以通过多种方式实现,以下是几种常见的方法:
管道(Pipe)
管道是一种单向通信机制,可以在父进程和子进程之间创建一个管道,实现它们之间的进程间通信。
from multiprocessing import Process, Pipedef sender(conn):conn.send('Hello from sender!')conn.close()def receiver(conn):msg = conn.recv()print('Received message:', msg)conn.close()if __name__ == '__main__':parent_conn, child_conn = Pipe()p1 = Process(target=sender, args=(parent_conn,))p2 = Process(target=receiver, args=(child_conn,))p1.start()p2.start()p1.join()p2.join()
共享内存(Shared Memory)
共享内存允许两个或多个进程访问同一块内存区域,通过这种方式,进程可以像操作本地内存一样操作共享内存中的数据。
from multiprocessing import Value, Arraydef worker(num, arr):for i in range(len(arr)):arr[i] = num * 2if __name__ == '__main__':num = 5arr = Array('i', 10)p = Process(target=worker, args=(num, arr))p.start()p.join()print(arr[:]) 输出: [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
消息队列(Message Queue)

消息队列允许进程将消息放入队列中,其他进程可以从队列中取出消息。`multiprocessing.Queue`是Python中实现消息队列的类。
from multiprocessing import Process, Queuedef producer(queue):queue.put('A')time.sleep(2)def consumer(queue):data = queue.get()print(data)if __name__ == '__main__':queue = Queue(10)p = Process(target=producer, args=(queue,))c = Process(target=consumer, args=(queue,))p.start()c.start()p.join()c.join()
其他方法
`apply_async()`:非阻塞式通讯
`apply()`:阻塞式通讯
`Value`和`Array`:共享内存的一种IPC方式
选择哪种通信方式取决于你的具体需求,例如是否需要阻塞、是否需要跨网络通信等。`multiprocessing.Queue`因其简单易用,通常是实现进程间通信的首选方法
