首页  >  文章  >  后端开发  >  Python 的多重处理中是否共享或复制大型数据结构?

Python 的多重处理中是否共享或复制大型数据结构?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-03 08:04:02483浏览

Are Large Data Structures Shared or Copied in Python's Multiprocessing?

多处理中的共享内存

在Python的多处理模块中,大数据结构是否在进程之间共享或复制的问题是值得关注的。

最初的担忧

当使用 multiprocessing.Process 创建多个进程并传入大型列表作为参数时,需要关心的是这些列表是为每个进程复制还是在进程之间共享他们。如果每个进程都进行复制,可能会显着增加内存使用量。

写入时复制

Linux 使用写入时复制方法,这意味着数据在被修改之前不会被物理复制。这表明每个子进程的列表不会重复。

引用计数

但是,访问对象会更新其引用计数。如果子进程访问列表元素,其引用计数就会增加。因此,不清楚是否会复制整个对象(列表)。

内存使用情况监控

观察表明整个对象实际上是每个子进程都有重复,可能是由于引用计数。如果列表无法修改并且它们的引用计数始终为正,则这是有问题的。

Python 3.8.0 中的共享内存

Python 3.8.0 引入了“true”使用 multiprocessing.shared_memory 模块共享内存。这允许显式创建可以从多个进程访问的共享内存对象,而无需复制。

总之,Linux 中的写时复制方法降低了复制大型数据结构的可能性,但引用计数可以导致实际的复制。在 Python 3.8.0 中使用“真正的”共享内存通过提供创建显式共享对象的机制解决了这个问题。

以上是Python 的多重处理中是否共享或复制大型数据结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

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