clusters
とを使用して互いに比較するオブジェクトのリストがありitertools.combinations
ますmap()
。
likelihoods = map(do_comparison, itertools.combinations(clusters, 2))
これを高速化するために、代わりに複数のプロセスを使用します。
from multiprocessing import Pool
pool = Pool(6)
likelihoods = pool.map_async(do_comparison, itertools.combinations(clusters, 2)).get()
小さなリストの場合、これはうまく機能します。ただし、16700 個のオブジェクトclusters
(139436650 個の組み合わせ)pool.map_async()
では大量のメモリが使用され、私の PC はすぐにメモリ不足になりmap()
ますが、メモリの問題はありません。
私の PC は、複数のプロセスが開始される前にメモリ不足になるため、データのチャンクを異なるプロセスに分割していると推測されます。を使ってみchunksize=1
たので、ほんの一部しか必要としませんでしたが、これでうまくいきました。
map_async()
より少ないメモリを使用できるようにする他の方法はありますか?