【问题标题】:Appending lists using multiprocessing pool使用多处理池附加列表
【发布时间】:2017-05-12 18:47:50
【问题描述】:

我是 python 和多处理模块的新手。我创建了一个非常简化的版本,以提炼我的问题。问题是,在附加它们的函数/工作进程之外调用变量时,这些变量似乎没有更新。

经过研究,我认为这可能与队列有关?但是,我认为 queues 更多是关于在我认为在我的情况下不需要的进程之间共享内存,因为每个列表都可以独立附加。

from multiprocessing import Pool

def build(array):
    array.append("hello")
    return array


if __name__== '__main__':
    x=["yo","sup"]
    y=["blah", "blah"]
    z=["apple","banana"]
    w=["cats", "dogs"]

    p=Pool(4)
    p.map(build,[x,y,z,w])
    p.close()
    p.join()

    print x, y, z, w

当我运行上面的代码时,它只是返回 x,y,z,w 作为估算值​​,而不在每个列表中附加“hello”,我不知道为什么。我知道如果我将 print 语句放在函数 build 的末尾,它将输出附加列表。我也意识到我可以做到以下几点:

results = p.map(build,[x,y,z,w])

print results

但是,在我的实际项目中,我需要稍后使用 x、y、z、w,并且不希望索引 results 来获取我正在寻找的列表。无论如何,对列表所做的更改可以说是在工作进程之外吗?

【问题讨论】:

    标签: python-2.7 python-multiprocessing


    【解决方案1】:

    每个进程都有自己的内存堆,因此您的列表会被复制到进程池工作人员内存并仅在那里进行更改

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 2021-02-13
      • 2016-04-18
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      相关资源
      最近更新 更多