Вот модуль питона в пакете питона:Python: не может получить доступ к памяти изменилось с многопроцессорной
import multiprocessing as mp
class Test(object):
def __init__(self):
self.dict = dict()
def fill_dict(self):
self.dict = {'testing': 123}
print self.dict
if __name__ == "__main__":
tests = [Test() for i in xrange(3)]
jobs = [mp.Process(target=test.fill_dict, args=()) for test in tests]
for job in jobs:
job.start()
for job in jobs:
job.join()
print "RESULTS:"
for test in tests:
print test.dict
я запустить модуль и получить результаты следующим образом:
C:\path\to\package>python -m package.path.to.module
{'testing': 123}
{'testing': 123}
{'testing': 123}
RESULTS:
{}
{}
{}
Из распечатки , кажется, что каждый test.dict
был заполнен параллельно multiprocessing
. Однако, когда я пытаюсь восстановить результаты, test.dict
s кажется пустым. Может кто-нибудь объяснить, почему это происходит и что я могу сделать, чтобы восстановить непустые test.dict
?
EDIT: @Valentin Лоренц, @Moinuddin Quadri, @zstewart
Даже если изменить последнюю часть модуля
if __name__ == "__main__":
test0 = Test()
test1 = Test()
test2 = Test()
jobs = list()
jobs.append(mp.Process(target=test0.fill_dict, args=()))
jobs.append(mp.Process(target=test1.fill_dict, args=()))
jobs.append(mp.Process(target=test2.fill_dict, args=()))
for job in jobs:
job.start()
for job in jobs:
job.join()
print "RESULTS:"
print test0.dict
print test1.dict
print test2.dict
я получить те же результаты. Каждый процесс полностью независим от других (они не разделяют память и не нуждаются). Итак, когда ответы говорят о совместном использовании памяти между процессами, означает ли это между основным модулем и процессами многопроцессорности?
Многопроцессорность запускает отдельные процессы python. Вы должны использовать multiprocessing.queue для отправки данных между процессами. – zstewart