首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python多处理池创建重复列表

Python多处理池创建重复列表
EN

Stack Overflow用户
提问于 2021-05-23 18:27:44
回答 1查看 278关注 0票数 1

我试图搞清楚多进程,我遇到了一些我完全不理解的东西。

我用pathos.multiprocessing来做更好的腌制。下面的代码创建了要迭代的对象列表。但是,当我运行它时,它会打印几个不同的列表,尽管引用了相同的变量?

代码语言:javascript
复制
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()

输出如下所示,每次都有不同的列表。

代码语言:javascript
复制
[<__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非常陌生,但是有没有办法解决这个问题?(每次都有相同的列表?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-23 18:42:37

使用多处理时,库会产生多个不同的进程。每个进程都有自己的地址空间。这意味着每个过程都有自己的变量副本,而一个进程中的任何更改都不会反映在其他流程中。

为了使用共享内存,需要特殊的构造来定义全局变量。对于pathos.multiprocessing,从注释中,似乎可以通过导入以下内容来声明多处理类型的共享变量:

代码语言:javascript
复制
from pathos.helpers import mp as multiprocess
a = multiprocess.Array('i', 2)  # Declares an integer array of size 2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67663109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档