2017-08-15 115 views
0

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

我可以使用多重处理来解决这个问题吗?它有任何副作用(如捶打等)?如果有人能指导我这种模式,那也是很棒的。我阅读了关于Multiprocess,Pools和imap的内容,但我仍然不清楚如何顺序写入文件(即白天)。

我的做法(任一下面的一个):

  1. 使用IMAP,因为我找得到有序输出。 或
  2. 要为每个输入文件编写单独的输出文件,然后通过排序将它们合并为一个。

有没有更好的模式来解决这个问题?我需要在这里使用队列吗?困惑!的方法有两个

回答

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)