首页 > 解决方案 > 无法让并行处理在 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()

为什么这种方法不起作用?

标签: pythonpython-3.xparallel-processingmultiprocessing

解决方案


您的问题实际上在前一行

  processes.append(Process(target=train_network, args=(ensemble, i, )))

应该:

  processes.append(Process(target=train_network, args=(ensemble, i )))

参数列表末尾的额外逗号导致参数列表继续寻找另一个条目而不是关闭。这会导致下一行出现语法错误,因为解析器仍在尝试为前一行查找另一个参数。


推荐阅读