首页 > 解决方案 > 如何在不复制的情况下在多个进程中使用大型数据集?

问题描述

我需要在 python 中对大型数据集(>10GB)运行多个(1000-10000s)搜索查询。为了加快速度,我想并行运行各个查询。但是,据我了解,将数据集解析到不同的进程会复制它,从而增加内存需求,这很快就会变得不可行。所以,我想问问社区,是否可以在不增加内存使用的情况下,在多个并行运行的进程(函数)中解析(处理)一个大数据集?

下面是一个示例脚本。在这里,随着 的增加n,内存使用量会增加并很快变得受限。

from multiprocessing import Pool
import sys

def goo(d):
    for k,v in d.items():
        print(k,len(v))

d = {'a':[3]*(10**5),
     'b':[6]*(10**8)}

n = int(sys.argv[1])

with Pool(processes=n) as pool:
    pool.starmap(goo, [[d]]*n)

编辑:澄清一下,这是一个工具的一部分,将与在不同平台和环境中工作的其他人共享。所以,我需要一些特定于 python 的东西,因为我不想让解决方案依赖于外部依赖项。

标签: pythonmultiprocessingbigdatalarge-data

解决方案


如果您已经在内存中拥有数据集,并且您希望避免将副本发送到其他进程,则只需使用共享内存作为IPC 机制(如果它在您的操作系统中可用)。

谷歌搜索python shmgetshmget是 Linux 中的系统调用)产生的这个库可能对你有用sysv_ipc


推荐阅读