2016-04-30 7 views
0

私は並列処理のためにPythonでマルチプロセッシングを使用しています。 私は、pandasを使用してexcelファイルから読み込んだデータのまとまりのプロセスを並列化しようとしています。Pythonでのマルチプロセッシング、同じ命令を実行する複数のプロセス

私はマルチプロセッシングと並列処理を初めて行っています。簡単なコードの実装時には、

import time; 
import os; 
from multiprocessing import Process 
import pandas as pd 
print os.getpid(); 
df = pd.read_csv('train.csv', sep=',',usecols=["POLYLINE"],iterator=True,chunksize=2); 
print "hello"; 
def my_function(chunk): 
    print chunk; 
count = 0; 
processes = []; 
for chunk in df: 
    if __name__ == '__main__': 
     p = Process(target=my_function,args=(chunk,)); 
     processes.append(p); 
    if(count==4): 
     break; 
    count = count + 1; 

印刷「こんにちは」は、私が作成した個々のプロセスが対象ではなく、メインのコードで動作するはずです推測している、複数回実行されています。

私が間違っている場所を誰にでも教えてもらえますか?

enter image description here

答えて

2

multiprocessing作品は、新しいプロセスを作成し、ターゲット機能を使用してファイルをインポートしていること方法。最も外側のスコープはprintステートメントを持っているので、すべてのプロセスに対して1回実行されます。

ところで、Processの代わりにPoolを直接使用する必要があります。ここでは、クリーンアップの例です:ディスクアクセスが、例えばより遅いずっとあるので、multiprocessingを使用して

import os 
import time 
from multiprocessing import Pool 

import pandas as pd 

NUM_PROCESSES = 4 


def process_chunk(chunk): 
    # do something 
    return chunk 


if __name__ == '__main__': 
    df = pd.read_csv('train.csv', sep=',', usecols=["POLYLINE"], iterator=True, chunksize=2) 
    pool = Pool(NUM_PROCESSES) 

    for result in pool.map(process_chunk, df): 
     print result 
0

はおそらく、ディスクから読んデータを高速化するつもりはありませんRAMアクセスまたは計算。ファイルのさまざまな部分が別のプロセスで終了します。

mmapを使用すると、データアクセスを高速化できます。

データファイルの読み取り専用mmapを実行した場合、の前に、たとえば、 Pool.mapの場合、各ワーカーは共有メモリマップファイルから独自のスライスを読み取り、処理できます。

関連する問題