Saya memiliki fungsi yang menerima dua masukan yang disediakan oleh kombinasi itertools, dan menghasilkan solusi. Kedua input tersebut harus disimpan sebagai tupel yang membentuk kunci dalam dict, sedangkan hasilnya adalah nilainya.
Saya dapat menggabungkan ini dan mendapatkan semua hasilnya sebagai daftar, yang kemudian dapat saya masukkan ke dalam kamus satu per satu, tetapi ini tampaknya tidak efisien. Apakah ada cara untuk mendapatkan hasil saat setiap pekerjaan selesai, dan langsung menambahkannya ke dict?
Intinya, saya memiliki kode di bawah ini:
all_solutions = {}
for start, goal in itertools.combinations(graph, 2):
all_solutions[(start, goal)] = search(graph, start, goal)
Saya mencoba memparalelkannya sebagai berikut:
all_solutions = {}
manager = multiprocessing.Manager()
graph_pool = manager.dict(graph)
pool = multiprocessing.Pool()
results = pool.starmap(search, zip(itertools.repeat(graph_pool),
itertools.combinations(graph, 2)))
for i, start_goal in enumerate(itertools.combinations(graph, 2)):
start, goal = start_goal[0], start_goal[1]
all_solutions[(start, goal)] = results[i]
Yang benar-benar berfungsi, tetapi diulang dua kali, sekali di kumpulan, dan sekali untuk menulis ke dict (belum lagi pembongkaran Tupel yang kikuk).
for i, (start, goal) in enumerate(itertools.combinations(graph, 2)):
membongkar langsung kestart
dangoal
(tanda kurung bukan opsional dalam kasus ini, karena Anda memerlukannya untuk memperjelas bahwa sedang terjadi pembongkaran bertingkat). - person ShadowRanger   schedule 14.02.2018