我正在运行一个多处理代码。代码的框架如下所示:
def func_a(x):
#main function here
return result
def func_b(y):
cores = multiprocessing.cpu_count() - 1
pool = multiprocessing.Pool(processes=cores)
results = pool.map(func_a, np.arange(1000)
return results
if __name__ == '__main__':
final_resu = []
for i in range(0, 200):
final_resu.append(func_b(i))
我在这段代码中发现的问题有两个:首先,在循环过程中内存继续增加。其次,在任务管理器(windows10(中,python的执行次数逐步增加,即从14到25,从36到47…每次迭代都在主循环中完成。
我相信多处理有问题,但我不知道该怎么处理。看起来func_b中的多处理在主循环完成一个循环时没有被删除?
正如文档中的示例所示,当您完成Pool
时,您应该通过pool.close()
和pool.join()
显式关闭它。也就是说,如果您只创建一次Pool
会更好,例如,将Pool
作为参数传递给func_b()
。并且在__name__ == '__main__'
块中只创建并关闭它一次。