我正在尝试对我的代码应用多处理。但是,我在传递列表时遇到问题。我有以下简化的代码
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)
]
你的目标是什么 -- 生成空列表的目的是什么,而不是边走边追加?因为可能有一种更简单的方法。