首页  >  文章  >  后端开发  >  如何在 Python 的多处理中的多个进程之间共享大型只读数组?

如何在 Python 的多处理中的多个进程之间共享大型只读数组?

Patricia Arquette
Patricia Arquette原创
2024-11-06 17:28:03778浏览

How Can I Share Large Read-Only Arrays Between Multiple Processes in Python's Multiprocessing?

多处理中的共享内存对象

在 Python 的多处理库中,您面临着同时在多个进程之间共享大型只读数组的挑战。

使用 Fork() 语义

如果您的操作系统使用写时复制 fork() 语义(例如 Unix),您的只读数据结构将所有子进程都可以访问,而无需额外的内存消耗。这是因为 fork() 创建了一种写时复制操作,因此一个进程对数据结构的更改只会写入到自己的内存空间,而其他进程则保持原始数据结构不变。

将数组打包到共享内存中

为了提高效率,请将数组转换为 NumPy 或数组结构并将其存储在共享内存中。围绕它创建一个 multiprocessing.Array 包装器并将其传递给您的函数。

可写共享对象

如果您需要可写共享对象,请使用同步或锁定机制。多处理提供两种方法:

  • 简单值、数组或 ctypes 的共享内存
  • 管理器代理,其中一个进程存储内存,管理器管理其他进程的访问

Manager 代理方法可以处理任意 Python 对象,但由于进程间通信涉及对象序列化和反序列化,速度较慢。

替代方法

除了多处理之外,Python 中还有各种并行处理库。如果您有多重处理可能无法充分满足的特定要求,请考虑这些选项。

以上是如何在 Python 的多处理中的多个进程之间共享大型只读数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn