1

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()より少ないメモリを使用できるようにする他の方法はありますか?

4

0 に答える 0