Python多进程不会更新对象属性

时间:2017-01-05 21:45:38

标签: python python-2.7 python-multiprocessing

Python很新,我不确定这个用例。为什么我的数据没有更新?我检查了对象data到处都是相同的(相同的内存位置)但是它的属性没有更新。

代码示例

from multiprocessing import Process


class Data(object):
    def __init__(self):
        self.val1 = 0
        self.val2 = 0
        self.val3 = 0
        self.val4 = 0


class Test(object):
    def __init__(self, data):
        self.data = data

    def update_val1(self):
        self.data.val1 = 1

    def update_val2(self):
        self.data.val2 = 2

    def update_val3(self):
        self.data.val3 = 3

    def update_val4(self):
        self.data.val3 = 4


data = Data()
test = Test(data)
jobs = []

p = Process(target=test.update_val1)
jobs.append(p)
p.start()

p = Process(target=test.update_val2)
jobs.append(p)
p.start()

p = Process(target=test.update_val3)
jobs.append(p)
p.start()

p = Process(target=test.update_val3)
jobs.append(p)
p.start()

for job in jobs:
    job.join()

print(data.val1)
print(data.val2)
print(data.val3)
print(data.val4)

我认为这不是一个好方法,我最好在队列中传递data对象以在进程之间共享此对象是对的吗?但data对象在每个进程中都是相同的,而不是副本,所以我很困惑为什么它不起作用.....

1 个答案:

答案 0 :(得分:0)

data对象是副本。

,每个进程都有自己独立于任何其他进程的内存空间

有关如何跨进程边界传递数据,请参阅https://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processeshttps://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes