该模块提供了一个 SharedMemory 类,用于分配和管理多核或对称多处理器(SMP)机器上进程间的共享内存。为了协助管理不同进程间的共享内存生命周期,multiprocessing.managers 模块也提供了一个 BaseManager 的子类: SharedMemoryManager

本模块中,共享内存是指 "System V 类型" 的共享内存块(虽然实现方式可能不完全一致)而不是 “分布式共享内存”。这种类型的的共享内存允许不同进程读写一片公共(或者共享)的易失性存储区域。一般来说,进程被限制只能访问属于自己进程空间的内存,但是共享内存允许跨进程共享数据,从而避免通过进程间发送消息的形式传递数据。与通过磁盘、套接字或者其他要求序列化、反序列化和复制数据的共享形式相比,直接通过内存共享数据拥有更出色的性能

下面简单使用一下

a.py 文件

from multiprocessing import shared_memory
shm_a = shared_memory.ShareableList(['张三', 2, 'abc'], name='123')

b.py 文件 

from multiprocessing import shared_memory

shm_b = shared_memory.ShareableList(name='123')
print(shm_b[0])  # ‘张三’
print(shm_b[1])  # 2
print(shm_b[2])  # ‘abc

 

name指定一个字符串,如果不指定系统就会生成一个不重复的字符串

可以在同一个py文件,也可以在不同的py文件里

class multiprocessing.shared_memory.ShareableList(sequence=None*name=None)

提供一个可修改的类 list 对象,其中所有值都存放在共享内存块中。这限制了可被存储在其中的值只能是 intfloatboolstr (每条数据小于10M), bytes (每条数据小于10M)以及 None 这些内置类型。它另一个显著区别于内置 list 类型的地方在于它的长度无法修改(比如,没有 append, insert 等操作)且不支持通过切片操作动态创建新的 ShareableList  实例。

sequence 会被用来为一个新的 ShareableList 填充值。 设为 None 则会基于唯一的共享内存名称关联到已经存在的 ShareableList

name 是所请求的共享内存的唯一名称,与 SharedMemory 的定义中所描述的一致。 当关联到现有的 ShareableList 时,则指明其共享内存块的唯一名称并将 sequence 设为 None

count(value)

返回 value 出现的次数。

index(value)

返回 value 首次出现的位置,如果 value 不存在, 则抛出 ValueError 异常。

format

包含由所有当前存储值所使用的 struct 打包格式的只读属性。