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 了解如何跨进程边界传递数据。
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 了解如何跨进程边界传递数据。