обмен данными с помощью Manager() в модуле мультипроцессинга python

Я попытался поделиться данными при использовании модуля multiprocessing (python 2. 7, Linux), я получил разные результаты при использовании немного другого кода:

import os
import time
from multiprocessing import Process, Manager

def editDict(d):
    d[1] = 10
    d[2] = 20
    d[3] = 30


pnum = 3
m = Manager()

1-я версия:

mlist = m.list()
for i in xrange(pnum):
    mdict = m.dict()
    mlist.append(mdict)
    p = Process(target=editDict,args=(mdict,))
    p.start()

time.sleep(2)
print 'after process finished', mlist

Это генерирует:

после завершения процесса [{1: 10, 2: 20, 3: 30}, {1: 10, 2: 20, 3: 30}, {1: 10, 2: 20, 3: 30}]

2-я версия:

mlist = m.list([m.dict() for i in xrange(pnum)]) # main difference to 1st version
for i in xrange(pnum):
    p = Process(target=editDict,args=(mlist[i],))
    p.start()
time.sleep(2)
print 'after process finished', mlist

Это генерирует:

после завершения процесса [{}, {}, {}]

Я не понимаю, почему результат такой разный.

8
задан HongboZhu 13 December 2011 в 06:59
поделиться