2016-04-14 6 views
0

私は16回評価するのに時間がかかる関数を実行しています。しかし、これらのすべての実行は、互いに独立しています。そこで、私はjoblibを使ってそれをスピードアップすることに決めました。joblibを使用して親プロセスに結果を返します

Joblibはそれと同じように動作し、速度を上げますが、評価値を適切に返す方法は1つの問題に苦しんでいますか?私は16の結果をメモリに、理想的にはリストに保存したい。しかし、新しいPythonプロセスは親が行うグローバル変数を使用しないため、グローバル変数の使用はオプションではないようです。 joblibのドキュメントによると、Parallelのmax_nbytes引数は配列サイズにしきい値を設定して共有しますが、子プロセス関数の16個の整数リストに対するすべての変更は親プロセスのリストには影響しません。

計算された値をファイルに保存し、親プロセスを使用して後で検索する唯一のオプションですか、それとも別の方法がありますか?

答えて

1

実際にjoblibが必要な場合は、結果をQueueに入力し、結果を最後に取得することができます。 from multiprocessing documentation:

from multiprocessing import Process, Queue 

def f(q): 
    q.put([42, None, 'hello']) 

if __name__ == '__main__': 
    q = Queue() 
    p = Process(target=f, args=(q,)) 
    p.start() 
    print q.get() # prints "[42, None, 'hello']" 
    p.join() 

また正確にそれを行いれ、multiprocessing.Poolを使用することができる:[9 1、4]

:(from multiprocessing documentation

from multiprocessing import Pool 

def f(x): 
    return x*x 

if __name__ == '__main__': 
    p = Pool(5) 
    print(p.map(f, [1, 2, 3])) 

は、標準出力に出力します

+0

キューは完全に動作します、ありがとうございます! – prkist

関連する問題