3.8 新版功能.
此模块提供一个类, SharedMemory 用于多核或对称多处理器(SMP)计算机上的一个或多个进程访问的共享内存的分配和管理。为了帮助共享内存的生命周期管理,特别是在不同的进程中,一个 BaseManager 子类, SharedMemoryManager ,也在 multiprocessing.managers 模块。
在这个模块中,共享内存指的是“SystemV样式”的共享内存块(尽管不一定要这样明确地实现),而不是“分布式共享内存”。这种类型的共享内存允许不同的进程潜在地读写到易失性内存的公共(或共享)区域。通常情况下,进程只能访问自己的进程内存空间,但共享内存允许进程之间共享数据,从而避免了在包含该数据的进程之间发送消息的需要。与通过磁盘或套接字或其他需要数据序列化/反序列化和复制的通信共享数据相比,直接通过内存共享数据可以提供显著的性能优势。
classmultiprocessing.shared_memory.SharedMemory(name=None, create=False, size=0)¶
创建新的共享内存块或附加到现有的共享内存块。每个共享内存块都被分配一个唯一的名称。通过这种方式,一个进程可以创建具有特定名称的共享内存块,而另一个进程可以使用相同的名称附加到同一个共享内存块。
作为跨进程共享数据的资源,共享内存块可能比创建它们的原始进程寿命更长。当一个进程不再需要访问其他进程可能仍然需要的共享内存块时, close() 应调用方法。当任何进程不再需要共享内存块时, unlink() 应调用方法以确保正确清理。
name 是请求的共享内存的唯一名称,指定为字符串。创建新的共享内存块时,如果 None (默认)为名称提供,将生成新名称。
创造 控制是否创建新的共享内存块 (True )或者附加了现有的共享内存块 (False )
size 指定创建新共享内存块时请求的字节数。由于一些平台选择根据平台的内存页大小分配内存块,因此共享内存块的确切大小可能大于或等于请求的大小。当附加到现有共享内存块时, size 参数被忽略。
close()¶
关闭对此实例的共享内存的访问。为了确保正确清理资源,所有实例都应调用 close() 一旦不再需要实例。注意调用 close() 不会导致共享内存块本身被销毁。
unlink()¶
请求销毁基础共享内存块。为了确保适当的资源清理, unlink() 应该在所有需要共享内存块的进程中调用一次(并且只调用一次)。请求销毁共享内存块后,可能会立即销毁共享内存块,也可能不会立即销毁共享内存块,并且此行为在不同平台上可能有所不同。之后尝试访问共享内存块内的数据 unlink() 已调用可能导致内存访问错误。注意:最后一个放弃对共享内存块的保留的进程可能会调用 unlink() 和 close() 按任何顺序。
buf¶
共享内存块内容的内存视图。
name¶
对共享内存块唯一名称的只读访问。
size¶
只读访问共享内存块的字节大小。
下面的示例演示了 SharedMemory 实例::
>>>from multiprocessing import shared_memory
>>>shm_a = shared_memory.SharedMemory(create=True, size=10)
>>>type(shm_a.buf)
>>>buffer = shm_a.buf
>>>len(b