0
很多新的Python,我不知道這個用例。爲什麼我的數據沒有更新?我檢查了對象data
無處不在(相同的內存位置),但其屬性未更新。Python多進程不更新對象屬性
代碼示例
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
對象在每個進程中都是一樣的,不是副本,所以我很困惑它爲什麼不起作用.....
這就是我的想法,但是當我在方法'update_val1'和'update_val2'中分解時,對象'data'是相同的(相同的內存塊)。這是我的IDE(PyCharm)的問題嗎? – GuillaumeA
@GuillaumeA你怎麼知道它是否是相同的內存塊?分叉新過程不會改變任何東西的地址;新的過程只是一個完整的克隆。內存對每個進程都是本地的。 – melpomene
好吧,我用一個經理名稱空間作爲共享對象來檢索每個處理結果。我不得不稍微修改我的類方法,但它的工作原理。我只是被PyCharm調試器弄糊塗了...... – GuillaumeA