首先,您想要使用join
,它會在繼續完成其餘代碼之前等待該過程完成。
其次,當您使用multiprocess
時,它會爲每個Process
創建一個新實例M
。內loop
class Multi:
def __init__(self):
self.x = 20
def loop(self):
print(self, 'loop')
for i in range(1, 100):
self.x = i
if __name__ == '__main__':
M = Multi()
print(M, 'main 1')
p = Process(target=M.loop)
p.start()
p.join()
print(M, 'main 2')
>>> <__main__.Multi object at 0x000001E19015CCC0> main 1
>>> <__mp_main__.Multi object at 0x00000246B3614E10> loop
>>> <__main__.Multi object at 0x000001E19015CCC0> main 2
正因爲如此打印self
時,你可以看到這一點,x
值在原來的類是永遠不會更新。
幸運的是,您可以使用Value對象來處理這個問題。這創建了一個共享內存對象,可以通過這些進程修改
from multiprocessing import Process, Value
class Multi:
def __init__(self):
self.x = Value('i', 20)
def loop(self):
for i in range(1, 100):
self.x.value = i
if __name__ == '__main__':
M = Multi()
p = Process(target=M.loop)
p.start()
p.join()
print(int(M.x.value))
>> 99
您確定在進程完成後檢查值*嗎? – MLavrentyev