在 Python 中利用不返回任何值的函数进行多重处理

问题描述 投票: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
列表没有更新。我希望找到一种安全的方法来使用多重处理以这种方式更新数据。

如何优雅地解决?

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

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 的工作进程中完成计算结果的工作,但数据结构的实际更新全部在您的主进程上。

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