如何使用 ProcessPool 在进程之间有效地共享字典和列表

How to efficiently share dicts and lists between processes using ProcessPool

让我们考虑以下示例:

from pathos.pools import ProcessPool

class A:
    def run(self, arg: int):

        my_list = list(...)
        my_dict = dict(...)

        def __run_parallel(arg: int):
            local_variable = 42

            # some code and read access...

            read_only1 = my_list[...]
            read_only2 = dict[...]


            # some code and write access...

            my_list.append(arg)
            my_dict[arg] = local_variable

        ProcessPool(4).map(__run_parallel, range(1000))

因为似乎 listdict 都不是线程安全的,所以我正在寻找一种方法 有效地 共享对这些变量的访问到池中的所有进程。

到目前为止,我已尝试使用 pa.helpers.mp.Managermy_listmy_dict 作为附加参数传递给 __run_parallel。然而,即使它有效,它也非常慢(因为它显然是为分布式系统构建的)。

由于我现在在多个晚上的试错环节中研究这个问题,我想问问是否有人知道如何高效使用共享 [= __run_parallel 中的 12=] 和 list 使用 pathos.

按照@Mike McKerns 的建议,将 listdict 变量都转换为 pathos.helpers.mp.Array 而没有中间变量 pa.helpers.mp.Manager 带来了预期的性能提升。