私はmultiprocessing.Pool()
いくつかの重い計算を並列化するために使用しています。
ターゲット関数は大量のデータ (巨大なリスト) を返します。RAMが不足しています。
がなければ、計算された結果の要素を次々と ing することmultiprocessing
で、ターゲット関数をジェネレーターに変更するだけです。yield
マルチプロセッシングはジェネレーターをサポートしていないことを理解しています.出力全体を待って一度に返しますよね?譲歩なし。Pool
結果配列全体をRAMに構築せずに、ワーカーが利用可能になるとすぐにデータを生成する方法はありますか?
簡単な例:
def target_fnc(arg):
result = []
for i in xrange(1000000):
result.append('dvsdbdfbngd') # <== would like to just use yield!
return result
def process_args(some_args):
pool = Pool(16)
for result in pool.imap_unordered(target_fnc, some_args):
for element in result:
yield element
これは Python 2.7 です。