0

私はPythonが初めてで、処理を並行してスケーリングしようとしています。特定の数のタプルを含むファイルがあり、それぞれの最後の列に特定の値があります。このファイル データを分割し、関数を各チャンクに並列に適用したいと考えています。しかし、問題は、最後の列の値に基づいてデータをチャンクに分割し、各チャンクに関数を適用することです。たとえば、最後の列には、一部のタプルには「a」、一部には「b」、一部には「c」が含まれる場合があります。その場合、3 つのチャンクを取得して並列処理する必要があります。最後の列の一意の値の数はデータセットによって変わる可能性があるため、それに応じて CPU を使用する必要があります。

Q1: 私が今まで試みたのは、ファイルを読み取り、そのレコードに基づいて辞書を作成することでした。したがって、基本的に、上記のキーと値のペアが 3 つ、1 つはキーとして 'a' を持ち、すべてのレコードは値として 'a' を持ち、 'b' と 'c' も同様です。マルチプロセッシングでチャンクサイズを利用できますが、ここではサイズではなく、キーに基づいているため、どうすればこれを達成できますか?

Q2: 上記のチャンクを処理した後、すべてをまとめて出力する必要があります。順序は関係ありません。出力全体を使用してさらに処理する必要があります。これらすべてのプロセスが完了するまでメイン プログラムを待機させるにはどうすればよいですか?

さらに入力が必要な場合はお知らせください。ありがとう。

4

1 に答える 1

3

あなたが説明したように、 Dictionary の値として 3 つのセットがあり、それらのそれぞれに個別にd機能を適用したいとします。f

from multiprocessing import Pool
p = Pool()                                   #number of processes = number of CPUs
keys, values= zip(*d.iteritems())            #ordered keys and values
processed_values= p.map( f, values )         #apply the function f to each set and wait for result
#then proceed to join the three sets
于 2014-09-17T14:01:39.343 に答える