Python多处理-处理完成后如何释放内存?
我在使用python多处理库时遇到了一个奇怪的问题 我的代码如下所示:我为每个“symbol,date”元组生成一个进程。之后我将结果合并 我希望当一个进程对一个“symbol,date”元组进行计算时,它应该释放它的内存吗?显然情况并非如此。我看到数十个进程(尽管我将进程池设置为大小7)在计算机中被挂起。它们不消耗CPU,也不释放内存 如何让进程在完成计算后释放内存 谢谢 “”“suspended”是指他们在ps命令中的状态显示为“S+”Python多处理-处理完成后如何释放内存?,python,memory,multiprocessing,Python,Memory,Multiprocessing,我在使用python多处理库时遇到了一个奇怪的问题 我的代码如下所示:我为每个“symbol,date”元组生成一个进程。之后我将结果合并 我希望当一个进程对一个“symbol,date”元组进行计算时,它应该释放它的内存吗?显然情况并非如此。我看到数十个进程(尽管我将进程池设置为大小7)在计算机中被挂起。它们不消耗CPU,也不释放内存 如何让进程在完成计算后释放内存 谢谢 “”“suspended”是指他们在ps命令中的状态显示为“S+” 您可能应该在Pool对象上调用close(),然后调用
您可能应该在
Pool
对象上调用close()
,然后调用wait()
join()
等待辅助进程退出。在使用join()之前,必须调用close()或terminate()
您是否尝试使用关闭池,然后等待进程结束,因为如果父进程继续运行而不等待子进程,它们将变为请尝试在池上设置MaxTasksParchild参数。如果不这样做,则池会一次又一次地重用该进程,这样就永远不会释放内存。设置后,进程将被允许死亡,并在其位置创建一个新进程。这将有效地清理内存
我想这是2.7中的新功能:这是脚本导致节点重新启动的根本原因,因为超过90%的4Gb内存被消耗:)谢谢!我一直在使用这种方法,效果很好。问题是,为什么它不释放内存?或者可能不够快…?这完全解决了我的问题,谢谢@user1914881
def do_one_symbol( symbol, all_date_strings ):
pool = Pool(processes=7)
results = [];
for date in all_date_strings:
res = pool.apply_async(work, [symbol, date])
results.append(res);
gg = mm = ss = 0;
for res in results:
g, m, s = res.get()
gg += g;
mm += m;
ss += s;