Python多进程共享内存:列表中的列表

3

使用multiprocessing.Array()或类似方法是否可以共享列表的内存?另外,是否可以共享更复杂的对象,例如scipy.sparse.lil_matrix?我该如何实现?有没有相应的示例?这个变量不需要被修改,但它占用了大量内存(每个进程约1GB),我希望共享内存可以减少内存使用量。这样做正确吗?

1个回答

1
一般来说,不行(而且Python在写时复制多进程方面尤其糟糕,因为即使读取对象也意味着更改其引用计数,这是一个写操作)。 但是,您可以尝试使用内存映射文件。将数据集转储到一个文件中,在多个进程中打开它并利用操作系统的I/O缓存获得好处。 您正在处理什么样的数据集?

你是在指 mmap 吗?这可以解决内存问题吗?是否可能提供一个相关的示例以便我开始?数据集是包含在 worker 函数中的多维启发式校准数据,用于科学模型。 - SkyNT
是的,我在谈论mmap -- 这个想法是将数据存储在硬盘上,并依赖于操作系统的缓存来移动内存中的内容。然而,这要求您的数据以字节列表的格式进行处理,如果您正在处理多维数据,则可能会相当痛苦。 - Max Noel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接