【问题标题】:Multiprocessing manager's list does not hold values after re-initializaing重新初始化后,多处理管理器列表不保存值
【发布时间】:2020-08-17 16:42:47
【问题描述】:

我有这种情况,多进程管理器的列表需要重新初始化为[] 以使其成为空白列表,但这样做之后它不再修改列表。

它确实在定义中本地修改它,在进程退出后不保存这些值,而是显示它一直保存到重新初始化之前的旧值。为什么会发生这种情况以及如何解决?

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]

【问题讨论】:

    标签: python python-3.x python-multiprocessing multiprocessing-manager


    【解决方案1】:

    当你这样做时:

    my_list = []
    

    您已将函数的 my_list 与全局 my_list 分离,请尝试:

    my_list[:] = []
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 2019-04-30
      • 2016-11-21
      • 1970-01-01
      • 2020-07-29
      相关资源
      最近更新 更多