私は2つの異なるプロセスによって配列の値を修正しようとしています。私はプロキシリストを使用して、私はそれを使用してドキュメントを読んだが、私はなぜdidntの仕事を知っていない。マルチプロセスでの可変変数
だから、1列と2つのプロセスが同じ時間でそれを修正...
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に割り当てますが、 'decrement'プロセスはその変更に言及しませんでした。そして、結局、バリスは全く変わりませんでした!!私は立ち往生し、何をすべきかを知りませんでした。私が望んでいるものを実行する方法はありますか?結局私はバリス= [5,4,5]を得ることを望む。
私の文法が間違っていれば正解してください。
'sharedctypes'を使うとき、pythonのドキュメントはプロキシリストを使いません。私の推測では、barisは共有ポインターであり、プロキシリストを使ってそれを割り当てると、渡されるポインター値のローカルコピーを変更するだけです。 – ktb