2017-08-15 18 views
0

したがって、1 GBあたり約30個のファイルがあり、16 GBのRAMと4個のCPUコアを搭載したMACで順次読み込みます。それぞれの処理は他の処理とは独立しています。処理を完了するまでに約2時間かかります。各ファイルには1日分のデータがあります(時系列/ 24時間)。したがって、30日間のデータがあります。処理後、私は出力を日ごとにファイルに追加しています(つまり、Day 1、Day 2など)。複数ファイルのマルチコア処理と共有出力ファイルへの書き込み

マルチプロセッシングを使用してこの問題を解決できますか?副作用(スラッシングなど)はありますか?また、ある人が私をパターンに導くことができればそれは素晴らしいことでしょう。私はMultiprocess、Pools、およびimapについて読んでいますが、ファイルに順次(つまり、日に日に)書く方法はまだ分かりません。

私のアプローチ(どちらか下記の1):私は探していますように、出力を命じ取得するにはIMAP

  1. 使用。 OR
  2. 入力ファイルごとに個別の出力ファイルを作成し、ソートして1つのファイルにマージします。

この問題を解決するには、より良いパターンがありますか?ここでキューを使用する必要がありますか?混乱している!

答えて

0

アプローチ2の基本的なデモ:

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) 
関連する問題