Как работает multiprocessing.Manager () в python?
У меня есть озабоченность по поводу многопроцессорности. Manager () в Python, вот пример,
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=[])
Меня смутило, почему список не изменился, как я ожидал? Кто-нибудь может помочь мне выяснить, что случилось? Заранее спасибо!