python - 写入文件时使用额外内存的 Python 多处理
问题描述
我正在编写一个程序,它加载一个巨大的数据集(4.G 的 RAM 使用)并将数据从内存写入文件。然后程序会将相同的数据集以不同的顺序写入不同的文件。
例如:
data: 1, 2, 3, 4 (但在我的程序中,数据记录在字典中,并且大小要大得多)
outfileA: 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 内存,每个子进程在运行时将额外占用 4G 内存。但是,当我不使用多进程而只调用函数时,情况并非如此。如果我只是调用该函数,它不会占用额外的内存。然后它让我感到困惑,因为它只读取保存的内存并将内存写入文件。这不应该占用额外的内存。我认为上述示例代码也会发生类似的额外内存使用。
解决方案
推荐阅读
- sql-server - SQL Server数据库日志文件最大大小设置问题
- javascript - 在第二个表单上添加一个链接以在切换后显示上一个表单
- php - 如何使用字母数组作为 PHP 中 foreach 循环的过滤器
- tcp - Netflow TCP 标志十六进制字符不代表 UAPRSF
- python - 如何在 FastAPI 中设置响应类?
- android - Kotlin:切换片段时lateinit属性userDatabase尚未初始化
- python - 如何根据条件对列重新排序
- python - PythonW 不运行脚本。严重地
- sql - SQL / SSRS 表达式
- javascript - Linebreak Javascript InnerText