Python池映射问题-列表列表

问题描述 投票:0回答:1

我正在尝试对我的代码进行多重处理。但是,传递列表列表时,我面临一个问题。我有以下简化代码

from multiprocessing import Manager, Pool, Process

def preprocess(tsk, passedlist, tsklist):

    tsklist[tsk] = tsk
    passedlist[tsk][0] = tsk

    return tsklist, passedlist


if __name__ == "__main__": 

    Machines = 30
    Tasks = 20
    manager = Manager()

    tsklist = [[] for tsk in range(Tasks)]
    list1 = [[[] for mch in range(Machines)] for tsk in range(Tasks)]
    tsklist = manager.list(tsklist)
    list1 = manager.list(list1)

    pool = Pool(processes = 3)

    opr_list = [(tsk, list1, tsklist) for tsk in range(Tasks)]

    results = list(pool.starmap(preprocess, opr_list))

    tsklist = list(results[0][0])
    list1 = list(results[0][1])

    pool.close()
    pool.join()

    print(tsklist[1])
    print(list1[1][0])

我正在获取list1 [1] [0] = []的输出,尽管它应该是1。我的代码中是否缺少某些内容?

python multiprocessing pool
1个回答
0
投票

因为这是创建列表列表的列表。但是您的最终声明print(list1[1][0])仅访问2的深度

我缩进了您的列表理解,因此更容易分辨。

list1 = [
    [
        [] for mch in range(Machines)
    ] for tsk in range(Tasks)
]

您的目标是什么-生成空列表而不是随手附上的目的是什么?因为可能有一种更简单的方法。

© www.soinside.com 2019 - 2024. All rights reserved.