2016-05-16 9 views
1

したがって、私は9000行のcsvファイルを持っています。私はそれを読んで、それを文字列キーの辞書リストに格納しました。私がしたいのは、すべてのアイテムlist[m]をループして、それを関数processItem(item)に処理することです。このprocessItemは、csvのような形式の文字列を返します。私の目的は、リスト内のすべての項目に対してprocessItemの結果を書くことです。どのようにこのマルチスレッドのやり方をするか考えていますか?マルチスレッドの読み書きPythonを使用したファイル

私はリストをN個のサブリストに分割し、これらのサブリストをマルチスレッドで処理する必要があると思います。すべてのスレッドは、サブリストから処理された文字列を返し、それをマージします。最後にファイルに書き出します。それを実装する方法は?

答えて

5

これは、multiprocessingモジュールとPool()機能を使用するための完全な例です(速度はthreadingモジュールを使用できません)。

リストの各要素に関数を適用しなければならないため、これは簡単に並列化できます。

with Pool() as p: 
    processed = p.map(processItem, lst) 

あなたは、Python 2を使用している場合は、Pool()は、コンテキストマネージャとして使用することはできませんが、あなたはこのようにそれを使用することができます:

p = Pool() 
processed = p.map(processItem, lst) 

あなたの機能processItem()あなたlst内の各要素を求めるになります結果は新しいリストprocessed(注文は保存されます)を作成します。

関数Pool()は、CPUにコアがあるプロセスワーカーを多く生成し、直前のプロセスが完了すると直ちにすべての要素が処理されるまで新しいタスクを実行します。

+0

ありがとうございます。私はこれを実装しようとします。 – Bharata

関連する問題