好吧,我嘗試通過兩個不同的過程修改數組的值。我已閱讀有關使用代理列表的文檔,我使用它,但我不知道爲什麼它不工作。多處理中的可變變量
所以1個陣列和兩個過程修改它,以相同時間..
import multiprocessing as mp
from multiprocessing.sharedctypes import Value, Array
import time
def decrement(baris):
for x in range(0,5):
c = [x-1 for x in baris]
baris = Array('i', c)
print(baris[:])
time.sleep(1)
print(baris[:])
def assign(baris):
for x in range(0,2):
f = baris[:]
f[1] = 5
baris = Array('i',f)
time.sleep(1)
print(baris[:])
if __name__ == '__main__':
baris = Array('i',[10,10,10], lock=mp.Lock())
decrease = mp.Process(target = decrement, args=(baris,))
decrease.daemon = True
decrease.start()
change = mp.Process(target = assign, args=(baris,))
change.daemon = True
change.start()
decrease.join()
change.join()
dir(baris)
print(baris[:])# + 'Final')
巴里斯是,我到底希望改變的變量。 c和f是代理列表。進程運行時,將'baris [1]'的值更改爲5,但進程'遞減'沒有提及該更改。最後,巴里根本沒有改變!我堅持不知道該怎麼做,是否有任何可能的方式來運行我的願望?最後,我希望我能得到baris = [5,4,5]。
,如果我的語法錯誤等
當使用'sharedctypes'時,python文檔不使用代理列表。我的猜測是baris是一個共享指針,當你使用代理列表分配給它時,你只是簡單地修改被傳遞的指針值的本地拷貝。 – ktb