Python 多处理池创建重复列表

Python multiprocessing pool creating duplicate lists

我正在尝试弄清楚多处理,但我 运行 遇到了我完全不明白的事情。

我正在使用 pathos.multiprocessing 进行更好的酸洗。下面的代码创建了一个我想要遍历的对象列表。但是,当我 运行 它时,它会打印几个不同的列表,尽管它引用了同一个变量?

import os
from pathos.multiprocessing import ProcessPool as Pool


class AnyClass:
    def __init__(self):
    pass


def any_function():
    any_list = []

for i in range(0, 3):
    any_object = AnyClass()
    any_list.append(any_object)

def particular_function(_argument):
    print(any_list)

with Pool(os.cpu_count()-1) as pool:
    pool.map(particular_function, any_list)

print(any_list)


if __name__ == '__main__':
    any_function()

输出看起来像这样,每次都有不同的列表。

[<__main__.AnyClass object at 0x7ff03da8ffd0>, <__main__.AnyClass object at 0x7ff03da9c040>, <__main__.AnyClass object at 0x7ff03da9c070>]
[<__main__.AnyClass object at 0x7ff03da9c100>, <__main__.AnyClass object at 0x7ff03da9c130>, <__main__.AnyClass object at 0x7ff03da9c160>]
[<__main__.AnyClass object at 0x7ff03da9c1f0>, <__main__.AnyClass object at 0x7ff03da9c220>, <__main__.AnyClass object at 0x7ff03da9c250>]
[<__main__.AnyClass object at 0x7ff03ac6a4f0>, <__main__.AnyClass object at 0x7ff03ac9ad60>, <__main__.AnyClass object at 0x7ff03da57af0>]

如果这是一个糟糕的解释或糟糕的问题,我很抱歉,因为我是 python 的新手,但是有什么办法可以解决这个问题吗?即每次都有相同的列表?

使用多处理时,库会生成多个不同的进程。每个进程都有自己的地址space。这意味着这些进程中的每一个都有自己的变量副本,并且一个进程中的任何更改都不会反映在其他进程中。

为了使用共享内存,您需要特殊的结构来定义您的全局变量。对于 pathos.multiprocessing,从 this 评论来看,您似乎可以通过简单地导入以下内容来声明多处理类型共享变量:

from pathos.helpers import mp as multiprocess
a = multiprocess.Array('i', 2)  # Declares an integer array of size 2