在Python中使用多处理和“void”之类的函数

问题描述 投票:0回答:1

考虑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
列表不在不同池之间共享。我不确定这是否是对这个问题的正确解释。如何优雅地解决?

python multithreading multiprocessing threadpool shared-memory
1个回答
0
投票

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

您让多处理来完成计算结果的工作,但数据结构的实际更新全部在您的主机上。

© www.soinside.com 2019 - 2024. All rights reserved.