使用多处理池追加列表

时间:2017-05-12 18:47:51

标签: python-2.7 python-multiprocessing

我是python和多处理模块的新手。我创建了一个非常简化的版本,我想要完成的工作来提炼我的问题。问题是,当在函数外部调用它们/工作进程时,变量似乎不会更新。

经过研究,我认为它可能与队列有关?但是,我相信队列更多的是在我不相信的过程之间共享内存,因为每个列表都可以独立添加。

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,并且不希望索引结果来获取我正在寻找的列表。无论如何,在工作流程之外,对列表所做的更改是否坚持?

1 个答案:

答案 0 :(得分:1)

每个进程都有自己的内存堆,因此您的列表将被复制到进程池工作程序内存中,并且只会 更改