python - 多处理中的可变变量

标签 python multiprocessing mutable

好的,我尝试通过两个不同的过程修改数组的值。我已经阅读了有关使用代理列表的文档,我使用了它,但我不知道为什么它不起作用。

所以 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')

baris 是我希望最终改变的变量。 c 和 f 是代理列表。当进程运行时,进程“分配”将 baris[1] 的值更改为 5,但进程“递减”并未提及该更改。最后,巴里斯一点都没变!!!!我卡住了,不知道该怎么做,是否有任何可能的方式来运行我想要的东西?最后我希望我得到 baris = [5,4,5]。

如果我的语法错误等,请更正

最佳答案

所以我刚刚测试了我的评论。

import multiprocessing as mp
from multiprocessing.sharedctypes import Array
import time

def decrement(baris):
    for x in range(0,5):
        for i, v in enumerate(baris):
            baris[i] = v - 1
        print(baris[:])
        time.sleep(1)
    print(baris[:])

def assign(baris):
    for x in range(0,2):
        baris[1] = 5
        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')

baris 是一个共享指针,当您使用代理列表将其重新分配给它时,您只是在修改正在传递的指针值的本地副本。如果要修改共享值,必须直接对共享值进行赋值。

关于python - 多处理中的可变变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44298642/

相关文章:

Python - 在 __hash__ 方法定义中使用默认的 __hash__ 方法

python - 列表列表更改意外地反射(reflect)在子列表中

c++ - 类中的可变变量——问题

c++ - 修改 const 对象的可变成员有效吗?

python - 在python中用正则表达式替换括号内和括号后的单词

python - Pandas - 以正确的方式连接两个不同结构的 JSON

c - 在 C 中运行 3 个并行命令提示符

python - 如何处理 Python 多处理数据库并发,特别是使用 django?

python - 如何用代码更改Mayavi中的字体类型和大小?

python - 为什么在 python map() 和 multiprocessing.Pool.map() 中得到不同的答案?