我正在尝试对我的代码进行多重处理。但是,传递列表列表时,我面临一个问题。我有以下简化代码
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。我的代码中是否缺少某些内容?
因为这是创建列表列表的列表。但是您的最终声明print(list1[1][0])
仅访问2的深度
我缩进了您的列表理解,因此更容易分辨。
list1 = [
[
[] for mch in range(Machines)
] for tsk in range(Tasks)
]
您的目标是什么-生成空列表而不是随手附上的目的是什么?因为可能有一种更简单的方法。