これは、 Paralel for loop, map() works, pool.map() gets TypeErrorの質問からのフォローアップです。ここで、 compare_clustersmultiprocessing.Pool.map(compare_clusters, clusters_1, clusters_2)
は関数、clusters_1 はオブジェクトのリスト、clusters_2 もオブジェクトのリストです。その質問に対する答えは、とは異なりmap
、multiprocessing.Pool.map
は 1 つのイテレータしかとることができず、この場合clusters_2
はチャンク サイズでなければならないことを明らかにしました。
私の質問は、ループを 2 つの反復子で並列化するにはどうすればよいですか?
コード
spectra_names, condensed_distance_matrix, index_0 = [], [], 0
for index_1, index_2 in itertools.combinations(range(len(clusters)), 2):
if index_0 == index_1:
index_0 += 1
spectra_names.append(clusters[index_1].get_names()[0])
try:
distance = 1/float(compare_clusters(clusters[index_1], clusters[index_2],maxiter=50))
except:
distance = 10
condensed_distance_matrix.append(distance)
並列化しようとした方法
from multiprocessing import Pool
condensed_distance_matrix, spectra_names, index_0, clusters_1, clusters_2 = [], [], 0, [], []
for index_1, index_2 in itertools.combinations(range(len(clusters)), 2):
if index_0 == index_1:
index_0 += 1
spectra_names.append(clusters[index_1].get_names()[0])
clusters_1.append(clusters[index_1])
clusters_2.append(clusters[index_2])
pool = Pool()
condensed_distance_matrix_values = pool.map(compare_clusters, clusters_1, clusters_2)
for value in condensed_distance_matrix_values :
try:
distance = 1/float(value)
except:
distance = 10
condensed_distance_matrix.append(distance)