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

2024-04-26 01:02:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如:

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

出口:1、2、4、3 出口B: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。但是,当我不使用多进程而只调用函数时,情况就不是这样了。如果我只调用这个函数,它不会占用额外的内存。它然后困惑我,因为它只读取保存的内存和写入文件的内存。这不应该占用额外的内存。我认为类似的额外内存使用也发生在上面的示例代码中。你知道吗


Tags: 文件数据内存代码in程序l1for