考虑Python中的以下代码:
from multiprocessing import Pool
data = [4] * 10
def update(j):
data[j] += j ** 2
def solver():
with Pool(8) as po:
po.map(update, range(10))
if __name__ == "__main__":
solver()
结果是
data
列表没有更新。我希望找到一种安全的方法来使用多重处理以这种方式更新数据。
我问了ChatGPT。它告诉我
data
列表不在不同池之间共享。我不确定这是否是对这个问题的正确解释。如何优雅地解决?
chatgpt 这一次完全正确。 数据结构不会在处理器之间复制。
尝试:
def update(j):
return j, j ** 2
def solver():
with Pool(8) as po:
for j, result in po.imap_unordered(update, range(10)):
data[j] = result
您让多处理来完成计算结果的工作,但数据结构的实际更新全部在您的主机上。