写入文件时使用额外内存的Python多处理

时间:2018-07-16 04:43:17

标签: python python-2.7 python-multiprocessing

我正在编写一个程序,该程序加载了巨大的数据集(RAM使用量为4.G),并将数据从内存写入文件中。然后,程序将以相同的顺序将相同的数据集写入不同的文件。

例如:

数据:1、2、3、4(但是在我的程序中,数据记录在字典中,并且大小更大)

输出文件A:1、2、4、3 outfileB:4,2,2,1 .......

我试图使用多重处理来加快处理速度,并在写入文件时对数组的索引重新采样。但是,我使用的每个子进程都将占用额外的内存。例如,数据集将占用4.5G的RAM,而每个子进程在运行时将占用额外的4G的RAM。奇怪的是,当我不使用多进程时,写入过程根本没有使用额外的内存。下面是一个简单的示例,解释了我的问题(不包括重采样部分):

我正在macOS上运行代码

import multiprocessing as mp

di = {}
l1 = ['a','b','c','d']
l2 = ['b','b','c','e']

for i in range(0,2):
    name = "abc"+str(i)
    di.update({name:[l1,l2]})

def writ(dirname):
    outfile = open(dirname,'w')
    for i in di:
        for object in di[i][0]:
            outfile.write(object)

p1 = mp.Process(target = writ,args=('d1',))
p2 = mp.Process(target = writ,args=('d2',))

p1.start()
p2.start()

在我的真实程序中,数据字典占用4.5G RAM,而每个子进程在运行时将占用额外的4G RAM。但是,当我不使用多进程而仅调用函数时,情况并非如此。如果仅调用该函数,则不会占用额外的内存。然后它使我感到困惑,因为它只读取保存的内存并将内存写入文件。那不应该占用额外的内存。我认为上述示例代码也会发生类似的额外内存使用情况。

0 个答案:

没有答案