我想更改多处理函数中的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)