该模块提供了一个 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 对象,其中所有值都存放在共享内存块中。这限制了可被存储在其中的值只能是 int
, float
, bool
, str
(每条数据小于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 打包格式的只读属性。