我对Python中的multiprocessing.Manager()
有些担忧。以下是示例:
import multiprocessing
def f(ns):
ns.x *=10
ns.y *= 10
if __name__ == '__main__':
manager = multiprocessing.Manager()
ns = manager.Namespace()
ns.x = 1
ns.y = 2
print 'before', ns
p = multiprocessing.Process(target=f, args=(ns,))
p.start()
p.join()
print 'after', ns
输出结果为:
before Namespace(x=1, y=2)
after Namespace(x=10, y=20)
到目前为止,它按照我的预期工作,然后我修改了代码如下:
import multiprocessing
def f(ns):
ns.x.append(10)
ns.y.append(10)
if __name__ == '__main__':
manager = multiprocessing.Manager()
ns = manager.Namespace()
ns.x = []
ns.y = []
print 'before', ns
p = multiprocessing.Process(target=f, args=(ns,))
p.start()
p.join()
print 'after', ns
现在的输出是:
before Namespace(x=[], y=[])
after Namespace(x=[], y=[])
我感到困惑的是,列表没有按照我预期的那样改变。有人可以帮助我弄清楚发生了什么吗?
ls
和di
中的嵌套列表需要包装在manager.list()
函数调用中。 - Martijn Pieters