我编写了一段简单的代码来加速我的功能f,使用2个CPU的示例如下所示:
if __name__ == '__main__':
pool = Pool(processes = 2)
f0_list = pool.map(f,range(nlocs))
pool.terminate()
pool.join()
final_f0 = np.sum(f0_list,axis=0)
f0_final = final_f0[0:121] # here I get the error message: 'final_f0 not defined'
我的结果' final_f0'是正确的。但是,我期望在pool.join()之后,所有进程都会结束,但似乎不是这样,因为:
有什么建议吗?
答案 0 :(得分:2)
您收到关于f0_final
的错误,因为您没有将该行保留在if __name__ == "__main__":
后卫中。在Windows上,multiprocessing
需要在其生成的子进程中重新导入__main__
模块,这意味着模块顶层的所有内容都将在父进程和< / em>所有孩子。
该行
f0_final = final_f0[0:121]
是在模块的顶层定义的,因此它会在所有子进程中执行,但是if __name__ == "__main__":
后卫下的代码没有,所以你试图获取{{1}的一部分将失败,这意味着所有子进程都将失败。这将使您的主要流程无法获得final_f0
回调的结果,并阻止池正常关闭。