Python 多进程不更新对象属性

Python multiprocess does not update object attributes

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对象在每个进程中都是一样的,不是副本,所以我很困惑为什么它不起作用.....

data 对象是一个副本。每个进程都有自己的内存space,独立于任何其他进程,所以一切都被复制。

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