为什么在python多重处理中tolist转换后的数组不追加



我想更改多处理函数中的numpy数组。因此,我将其转换为manager.list并赋予子流程。在子流程中进行的更改(追加(没有返回到原始列表。它与另一个列表一起工作,我对它执行相同的更改,只是基本列表不是来自转换后的数组。

我本以为处理后第1行会出现[8],但没有改变。有人能帮忙吗?非常感谢。

这是代码:

from multiprocessing import Process, Manager
import numpy as np
def f(L, L1):
    row = L
    row.append([4])
    L = row
    row1 = L1
    row1.append([8])
    L1 = row1
if __name__ == '__main__':
    manager = Manager()
    lst = manager.list()
    lst.append([1])
    lst.append([2])               
    lst.append([3])               
    print('lst main before: ', lst)
    a = np.array([[5],[6]])
    lst1 = manager.list()
    lst1 = np.array(a).tolist()
    lst1.append([7])
    print('lst1 main before: ', lst1)
    p = Process(target=f, args=(lst,lst1))
    p.start()
    p.join()
    print('lst main after: ', lst)
    print('lst1 main after: ', lst1)

输出

lst main before:  [[1], [2], [3]]
lst1 main before:  [[5], [6], [7]]
lst main after:  [[1], [2], [3], [4]]
lst1 main after:  [[5], [6], [7]]

看看这个:

    lst1 = manager.list()
    lst1 = np.array(a).tolist()

第一个语句使lst1成为Manager列表。但是第二条语句将它替换为一个普通列表,它不再是Manager

您应该先创建列表,然后对其进行管理。

    lst1 = np.array(a).tolist()
    lst1 = manager.list(lst1)

相关内容

  • 没有找到相关文章

最新更新