2017-04-11 8 views
-1

多くのデータ行(pandasDataFrame)で行う作業がありますが、各計算は独立しているため、並列化したいと思います。numpy配列で同時に書き込む

私は関数を行とオブジェクトを出力する(出力は実際には文字列とセットを含む配列です)。

def compute_row(index, row, output):  
    output[index] = some_function(row) 

次に、私はそれを並行して使用しようとします。

output = np.empty(data_length, dtype=object) 

num_cores = multiprocessing.cpu_count() 
Parallel(n_jobs=num_cores)(delayed(compute_row)(i, row, outputx) for i, row in db.iterrows()) 

問題は、私は、たとえば1some_functionを交換する場合でも、私はNoneの配列を取り戻すことです。

インデックスは一意であるため、同時のメモリアクセスの問題は発生しません。私はここで何が欠けていますか?多分別のデータ構造を使うべきでしょうか?

ありがとうございます!

+0

出力は、 'compute_row'メソッドが何かを返すことになっているので、' None'の配列です。なぜあなたは 'return some_function(row)'だけではないのですか? –

答えて

0

Ok、 別の方法で、Poolオブジェクトを使用しました。

from multiprocessing import Pool 

def compute_row(row):  
    return some_function(row) 

pool = Pool() 
output = pool.map(compute_row, (row for i, row in db.iterrows())) 
関連する問題