多处理管理器列表在重新初始化后不保存值
Multiprocessing manager's list does not hold values after re-initializaing
我有这样的情况,需要将多进程管理器的列表重新初始化为 []
以使其成为空白列表,但在这样做之后它不再修改列表。
它确实在定义内部对其进行了本地修改,在进程退出后不会保留这些值,而是显示它一直保留到重新初始化之前保留的旧值。为什么会发生这种情况以及如何解决?
import multiprocessing
import random
def mydef(my_list):
data_list = [3,2,2,6,7,4,2,5,6,9,3,2]
for n in data_list:
if n == 7:
my_list = []
else:
my_list.append(n)
print(my_list)
m = multiprocessing.Manager()
m_list = m.list()
p = multiprocessing.Pool(processes=4)
p.apply_async(mydef, (m_list,))
p.close()
p.join()
print(f'\nThe final list is {m_list}')
这个输出是
[3]
[3, 2]
[3, 2, 2]
[3, 2, 2, 6]
[]
[4]
[4, 2]
[4, 2, 5]
[4, 2, 5, 6]
[4, 2, 5, 6, 9]
[4, 2, 5, 6, 9, 3]
[4, 2, 5, 6, 9, 3, 2]
The final list is [3, 2, 2, 6]
当你这样做时:
my_list = []
您已将函数的 my_list 与全局 my_list 分离,尝试:
my_list[:] = []
我有这样的情况,需要将多进程管理器的列表重新初始化为 []
以使其成为空白列表,但在这样做之后它不再修改列表。
它确实在定义内部对其进行了本地修改,在进程退出后不会保留这些值,而是显示它一直保留到重新初始化之前保留的旧值。为什么会发生这种情况以及如何解决?
import multiprocessing
import random
def mydef(my_list):
data_list = [3,2,2,6,7,4,2,5,6,9,3,2]
for n in data_list:
if n == 7:
my_list = []
else:
my_list.append(n)
print(my_list)
m = multiprocessing.Manager()
m_list = m.list()
p = multiprocessing.Pool(processes=4)
p.apply_async(mydef, (m_list,))
p.close()
p.join()
print(f'\nThe final list is {m_list}')
这个输出是
[3]
[3, 2]
[3, 2, 2]
[3, 2, 2, 6]
[]
[4]
[4, 2]
[4, 2, 5]
[4, 2, 5, 6]
[4, 2, 5, 6, 9]
[4, 2, 5, 6, 9, 3]
[4, 2, 5, 6, 9, 3, 2]
The final list is [3, 2, 2, 6]
当你这样做时:
my_list = []
您已将函数的 my_list 与全局 my_list 分离,尝试:
my_list[:] = []