考虑 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 这一次完全正确。 数据结构不会在进程之间复制。
尝试:
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
您让多处理在 Pool 的工作进程中完成计算结果的工作,但数据结构的实际更新全部在您的主进程上。