为什么我总是收到 [BrokenPipeError: [Errno 32] Broken pipeline],无论我的池中的工作线程数量有多少(在 python3.8 中使用多处理库)?

Tra*_*ssa 3 python cpu multiprocessing python-3.x python-multiprocessing

我正在尝试使用 python3 的多处理库的工作池来加速 CPU 密集型任务。我注意到,无论我的池中有多少工作人员,我总是会收到以下错误:

BrokenPipeError:[Errno 32] 管道损坏

导致此错误的代码如下:


def save_result(rincL):
    #Save results here

if __name__ == '__main__':
    p = Pool(8)
    allProcesses = []
    for i in range(60): 
        rincL = RINC_L(2, X_train, y_train[:,i].ravel(), X_test, y_test[:,i].ravel(), 6, i)
        allProcesses.append(p.apply_async(rincL.RINC_N, [0]))
    #Moved the two following lines based on suggestions in the comment
    #Still getting the same error.
    #p.close()
    #p.join()
    for process in allProcesses:
        save_result(process.get())
        time.sleep(1)
    p.close()
    p.join()
Run Code Online (Sandbox Code Playgroud)

我还注意到该程序运行一段时间后。进程数量从 8 个跃升至一个非常高的数字。大约生成了 30 个进程: 在此输入图像描述

Tra*_*ssa 7

子进程使用了​​太多内存并被操作系统杀死。