好吧,我尝试通过两个不同的过程修改数组的值。我已阅读有关使用代理列表的文档,我使用它,但我不知道为什么它不工作。多处理中的可变变量
所以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