我是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,并且不希望索引结果来获取我正在寻找的列表。无论如何,在工作流程之外,对列表所做的更改是否坚持?
答案 0 :(得分:1)
每个进程都有自己的内存堆,因此您的列表将被复制到进程池工作程序内存中,并且只会 更改