在Python中,实现多进程通信(IPC)可以通过以下几种方式:
使用`multiprocessing.Queue`
`Queue`类基于先进先出(FIFO)原则,适合用于进程间的消息传递。
```python
from multiprocessing import Process, Queue
def producer(queue):
for i in range(5):
queue.put(f"数据 {i}")
print(f"数据 {i} 已发送。")
def consumer(queue):
while True:
data = queue.get()
if data is None:
break
print(f"数据 {data} 已接收。")
if __name__ == "__main__":
queue = Queue()
p = Process(target=producer, args=(queue,))
c = Process(target=consumer, args=(queue,))
p.start()
c.start()
p.join()
c.join()
使用`multiprocessing.Pipe``Pipe`可以用于创建一对连接对象,用于双向通信。```pythonfrom multiprocessing import Process, Pipe
def sender(conn):
for i in range(10):
conn.send(i)
time.sleep(2)
def receiver(conn):
while True:
print('test2 value:%s' % conn.recv())
time.sleep(2)
if __name__ == "__main__":
parent_conn, child_conn = Pipe()
p = Process(target=sender, args=(child_conn,))
p2 = Process(target=receiver, args=(parent_conn,))
p.start()
p2.start()
使用`multiprocessing.Value`和`Array`
这些类允许你创建共享内存,实现进程间共享数据。

```python
from multiprocessing import Process, Value, Array
def worker(num, arr):
for i in range(len(arr)):
arr[i] = num * 2
if __name__ == "__main__":
num = 5
arr = Array('i', range(10))
p = Process(target=worker, args=(num, arr))
p.start()
p.join()
print(arr[:])
使用`multiprocessing.Manager``Manager`可以创建一个管理器对象,通过它可以创建在进程池之间共享的数据结构。```pythonfrom multiprocessing import Process, Manager
def worker(shared_list):
shared_list.append("Hello from child process")
if __name__ == "__main__":
manager = Manager()
shared_list = manager.list()
p = Process(target=worker, args=(shared_list,))
p.start()
p.join()
print(list(shared_list))
使用`multiprocessing.Event`
`Event`对象允许进程等待某些事件的发生。
```python
from multiprocessing import Process, Event
def setter(event):
time.sleep(2)
event.set()
def waiter(event):
event.wait()
print("Event has been set.")
if __name__ == "__main__":
event = Event()
p = Process(target=setter, args=(event,))
q = Process(target=waiter, args=(event,))
p.start()
q.start()
p.join()
q.join()
以上是Python中实现多进程通信的一些常见方法。选择哪种方法取决于你的具体需求,例如是否需要跨进程池通信、通信的复杂性、性能要求等
