多个文件的多核处理和写入共享输出文件

时间:2017-08-15 09:38:21

标签: python multiprocessing file-processing

所以,我有大约30个文件,每个1 GB的大小,我在具有16 GB RAM和4个CPU核心的MAC上顺序读取它们。它们中的每一个的处理独立于其他处理。完成处理需要将近2个小时。每个文件都有一天的数据(时间序列/ 24小时)。所以有30天的数据。处理完毕后,我将输出文件附加到文件中(即第1天,第2天,依此类推)。

我可以使用多处理解决此问题吗?它有任何副作用(如捶打等)吗?如果有人可以指导我的模式,那也很棒。我读过有关Multiprocess,Pools和imap的内容,但我仍然不清楚如何顺序写入文件(即日常)。

我的方法(以下任何一种):

  1. 使用imap获取我正在寻找的有序输出。 OR
  2. 为每个输入文件编写单独的输出文件,然后通过排序将它们合并为一个。
  3. 有没有更好的模式来解决这个问题?我需要在这里使用队列吗?困惑!

1 个答案:

答案 0 :(得分:0)

方法二的基本演示:

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)