【问题标题】:Multicore processing of multiple files and writing to a shared output file多个文件的多核处理并写入共享输出文件
【发布时间】:2017-08-15 09:38:21
【问题描述】:
所以,我有大约 30 个文件,每个文件大小为 1 GB,我在具有 16 GB RAM 和 4 个 CPU 内核的 MAC 上按顺序读取它们。它们中的每一个的处理都是独立于其他的。完成处理大约需要 2 个小时。每个文件都有一天的数据(时间序列/24 小时)。所以有30天的数据。处理后,我每天将输出附加到文件中(即第 1 天、第 2 天等)。
我可以使用多处理来解决这个问题吗?它有任何副作用(如抖动等)吗?如果有人能在模式上指导我,那就太好了。我阅读了有关多进程、池和 imap 的信息,但我仍然不清楚如何按顺序写入文件(即按天写入)。
我的方法(以下任意一种):
- 使用 imap 获取我正在寻找的有序输出。
或
- 为每个输入文件编写单独的输出文件,然后通过排序将它们合并为一个。
有没有更好的模式来解决这个问题?我需要在这里使用队列吗?糊涂了!
【问题讨论】:
标签:
python
multiprocessing
file-processing
【解决方案1】:
方法二的基本演示:
from concurrent.futures import ProcessPoolExecutor
executor = ProcessPoolExecutor(max_workers=10)
inputs = ['a.input.txt', ]
outputs = ['a.output.txt', ]
def process(input, output):
""" process one file at a time."""
pass
def merge(files):
""" merge all output files. """
pass
for i in range(len(inputs)):
executor.submit(process, inputs[i], outputs[i])
merge(outputs)