python - Python 池映射问题 - 列表列表
问题描述
我正在尝试将多处理应用于我的代码。但是,在传递列表列表时我遇到了一个问题。我有以下简化代码
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)
]
你的目标是什么——生成空列表的目的是什么,而不是在你去的时候追加?因为可能有更简单的方法。
推荐阅读
- indexing - 如果在活动工作期间创建索引,Firebird“键大小超出索引的实现限制”错误消息?
- sms - 接收 Twilio 发送的带有测试凭据的 SMS?
- c# - 识别为 DateTime 的十进制值,而不是从 DateTime.Parse 返回 false
- php - 在 phpword Laravel 中定义另一个表中的一些数据
- javascript - Recaptcha 错误“意外令牌” - Firebase 云功能
- python - 使用 python keras 训练 CNN 时出现 AttributeError
- core-data - CoreData+CloudKit iOS13 NSPersistentStoreRemoteChangeNotification
- python - 如何将视频流从 python 传输到电子?
- google-vault-api - 创建组时出现内部服务器错误
- vuejs2 - 如何使用 vue 路由器添加表单部分 HTML?