我有一个对象列表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()
对于小型列表,这很有用。但是,对于clusters
(139436650组合)中的16700个对象,pool.map_async()
使用了大量内存,而且我的电脑很快耗尽内存,而map()
没有内存问题。
我的电脑在启动多个进程之前内存不足,所以我的猜测是它仍然在不同的进程上划分数据块。所以我尝试使用chunksize=1
,因此它只需要它的一小部分,但现在这确实有效。
还有其他方法让map_async()
使用更少的内存吗?