1. 为什么需要共享内存?
在Python多进程编程中,每个进程都有自己独立的内存空间。当我们需要在多个进程间传递大量数据时,传统的队列(Queue)方式需要进行数据的序列化和反序列化,这个过程会带来显著的开销。我曾在处理图像处理任务时,发现用Queue传递2048x2048的numpy数组,单次传输就要50多毫秒,这在实时系统中是完全不可接受的。
共享内存的核心理念是:让多个进程可以直接访问同一块物理内存区域。这就像是在办公室里共享一块白板,任何人都可以直接在上面读写,而不需要把内容反复抄写在纸上传递。在Python 3.8之后,标准库提供了multiprocessing.shared_memory模块,让共享内存的实现变得非常简单。
2. 基础实现:从零搭建共享内存
2.1 创建共享内存块
我们先来看最基本的共享内存创建方法。下面的代码演示了如何创建一个1GB的共享内存区域:
from multiprocessing import shared_memory
# 创建1GB的共享内存
shm = shared_memory.SharedMemory(
name='my_shared_memory', # 唯一标识符
create=True, # 创建新内存区域
size=1024*1024*1024 # 1GB
)
# 使用内存区域
buffer = shm.buf # 获取memoryview对象
buffer[0:100] = b'A'*100 # 写入数据
# 其他进程可以通过name连接这个共享内存
这里有几个关键点需要注意:
name是共享内存的唯一标识,其他进程通过这个名称连接create=True表示创建新内存,False表示连接已有内存size以字节为单位,需要提前计算好所需空间


1915

被折叠的 条评论
为什么被折叠?



