我有一个工具,每当它运行时,它都会生成大量的文件(从几十万到几百万).所有这些文件都可以相互独立地读取.我需要分析它们并总结信息.
生成的文件的虚拟示例:
File1:
NAME=John AGE=25 ADDRESS=123 Fake St
NAME=Jane AGE=25 ADDRESS=234 Fake St
File2:
NAME=Dan AGE=30 ADDRESS=123 Fake St
NAME=Lisa AGE=30 ADDRESS=234 Fake St
摘要-统计地址在所有文件中出现的次数:
123 Fake St - 2
234 Fake St - 2
我想使用并行化来读取它们,所以我会想到multiprocessing
或asyncio
(I/O密集型操作).我计划在将 for each 文件并行调用的单个单元/函数中执行以下操作:
- 打开文件,逐行打开
- 填充包含此文件专门提供的信息的唯一词典
- 关闭该文件
一旦我完成了所有文件的并行读取,并且每个文件有一个词典,我现在就可以循环每个词典并根据需要进行总结.
我认为我需要这个两步过程的原因是,我不能对该函数进行多个并行调用,直接汇总并写入一个通用汇总字典.这会把事情搞砸的.
但这意味着我将消耗大量内存(因为内存中保存了数十万到数百万个词典).
为了达到这一目标,怎样才能充分利用运行时和内存消耗这两个方面呢?