进程间通信(IPC)是多进程程序中重要的一部分。它允许多个进程之间进行数据交换,实现进程协作。
Python中主要有以下几种进程间通信方式:
- 管道(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'
- 队列(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()
- 共享内存(Value/Array):
- 使用
multiprocessing
模块的Value
和Array
类可以在进程间共享内存。 - 用法:
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]