0

我之前问过一个关于从父程序更新并行进程中的单个值的问题。可以在Python:Update Local Variable in a Parallel Process from Parent Program中找到对此的最佳答案。现在我想将这个问题扩展到数组。假设我有以下简单的程序,它遍历已定义数组的第一个单元格(类似于提供的链接):

import time

def loop(i):
    while 1:
        print i[0]
        i[0] += 1
        time.sleep(1)

if __name__ == "__main__":
    from multiprocessing import Process, Array

    i = Array("i", [1,2,3,4])
    p = Process(target=loop, args=(i,))
    p.start()
    time.sleep(2)
    # update i in shared memory???

从这个程序中,我如何更新“i”以便“循环”函数继续运行并读取新数组?例如,如果我想将“i”设置为 [50,51,52,53]。是否有像“值”这样的等效属性可以做到这一点?我做了很多搜索,找不到任何解决方案。非常感谢您提前。

4

1 回答 1

0

更新i 就地使用

i[:] = [50, 51, 52,53]

请注意,i就地修改很重要,因为如果要分配i新值,例如使用

i = [50, 51, 52, 53]

然后i将简单地指向一个新列表,而不修改共享数组。

顺便说一下, Python 习语i[:] = [...]也用于就地修改 Python 列表。


import time

def loop(i):
    while 1:
        print list(i)
        # i[0] += 1
        i[:] = [50,51,52,53]
        time.sleep(1)

if __name__ == "__main__":
    from multiprocessing import Process, Array

    i = Array("i", [1,2,3,4])
    p = Process(target=loop, args=(i,))
    p.start()
于 2013-10-09T21:54:00.600 回答