如何在Python中进行进程间通信?代码举例讲解

进程间通信(IPC)是多进程程序中重要的一部分。它允许多个进程之间进行数据交换,实现进程协作。

Python中主要有以下几种进程间通信方式:

  1. 管道(Pipe):
  • 管道可以在父子进程.兄弟进程之间实现单向或双向通信。
  • 用法:
import os

# 创建管道
pipe_read, pipe_write = os.pipe()

# 子进程中只需要关闭不需要的一端
os.close(pipe_read)  

# 向管道写入数据
os.write(pipe_write, b'Hello')

# 父进程中只需要关闭不需要的一端
os.close(pipe_write)  

# 从管道读取数据
data = os.read(pipe_read, 5)  
print(data)  # b'Hello'
  1. 队列(Queue):
  • 队列可以实现进程间数据交换,使用multiprocessing模块的Queue类。
  • 用法:
from multiprocessing import Process, Queue

# 创建队列
q = Queue()  

# 向队列中写入数据的进程  
def process_write(q):
    q.put([1, 2, 3])

# 读取队列中数据的进程  
def process_read(q):   
    print(q.get())  # [1, 2, 3]

if __name__ == '__main__':
    pw = Process(target=process_write, args=(q,))
    pr = Process(target=process_read, args=(q,))
    pw.start()
    pr.start()
  1. 共享内存(Value/Array):
  • 使用multiprocessing模块的ValueArray类可以在进程间共享内存。
  • 用法:
from multiprocessing import Process, Value, Array

# 创建共享内存  
value = Value('i', 0)
array = Array('i', [1, 2, 3])   

# 访问共享内存的进程
def process():
    value.value += 1
    print(array[:])   # [1 2 3]

if __name__ == '__main__':
    p1 = Process(target=process)
    p1.start()
    p1.join()
    print(value.value)   # 1
    print(array[:])      # [1 2 3]