2017-08-15 114 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)