multiprocessing.imap_unordered
値のリストに対して計算を実行するために使用しています。
def process_parallel(fnc, some_list):
pool = multiprocessing.Pool()
for result in pool.imap_unordered(fnc, some_list):
for x in result:
yield x
pool.terminate()
の各呼び出しfnc
は、設計上、結果として巨大なオブジェクトを返します。そのようなオブジェクトのN個のインスタンスをRAMに格納できます。ここで、N〜cpu_countですが、それ以上(数百ではない)ではありません。
現在、この関数を使用すると、メモリを大量に消費します。メモリは、ワーカーではなく、メインプロセスで完全に消費されます。
完成した結果をどのようにimap_unordered
保存しますか?私は、労働者によってすでに返されているが、まだユーザーに渡されていない結果を意味します。私はそれが賢いと思い、必要に応じて「怠惰に」計算するだけでしたが、明らかにそうではありませんでした。
結果を十分に速く消費できないため、プールはこれらの巨大なオブジェクトを内部のどこかprocess_parallel
からキューに入れ続け、その後爆発します。fnc
これを回避する方法はありますか?どういうわけかその内部キューを制限しますか?
Python2.7を使用しています。乾杯。