python - 无法让并行处理在 python 中工作
问题描述
此代码总是抛出错误“[Errno 32] Broken pipe”(错误是在表示 processes[i].start() 的行上抛出的):
from NetworkEnsemble import NetworkEnsemble
from multiprocessing import Process
NUM_NETWORKS = 2
def train_network(ensemble, network_num):
ensemble.train_network(network_num)
ensemble = NetworkEnsemble( NUM_NETWORKS, (600), 0.01)
if __name__ == "__main__":
print("[BEGIN TRAINING]")
processes = list()
for i in range(NUM_NETWORKS):
processes.append(Process(target=train_network, args=(ensemble, i, )))
processes[i].start()
for i in range(NUM_NETWORKS):
processes[i].join()
print("[END TRAINING]")
ensemble.full_ensemble_evaluation()
为什么这种方法不起作用?
解决方案
您的问题实际上在前一行
processes.append(Process(target=train_network, args=(ensemble, i, )))
应该:
processes.append(Process(target=train_network, args=(ensemble, i )))
参数列表末尾的额外逗号导致参数列表继续寻找另一个条目而不是关闭。这会导致下一行出现语法错误,因为解析器仍在尝试为前一行查找另一个参数。
推荐阅读
- bash - 使用 Bash 脚本构建/部署 Docker
- python - 熊猫:转义列中的所有空格
- github - 如何在 github Action 中传递 json 文件?
- c# - C# ASP.Net Core 在 MongoDB 中创建唯一的电子邮件字段
- reinforcement-learning - 如何在pybullet中模拟另一个对象平衡?
- sql-server - 在 SSIS 中将 VARCHAR(MAX) 字段从 SQL 导出到 Excel
- java - 在接口声明上使用@PreAuthorize
- mysql - 检索所有帖子计数与日期排序日期错误
- ios - 尝试将图像叠加到 CALayer 上并保留子视图 (UITextView) 的位置
- django - 视图集响应的 Django Rest Framework 序列化