Python多处理 - 如何在进程完成后释放内存?

时间:2011-10-04 13:52:11

标签: python memory multiprocessing

使用python多处理库时遇到了一个奇怪的问题。

我的代码概述如下:我为每个“符号,日期”元组生成一个进程。我之后结合了结果。

我希望当一个进程完成“符号,日期”元组的计算时,它应该释放它的内存吗?显然情况并非如此。我看到几十个进程(虽然我将进程池设置为大小为7),这些进程在机器中被挂起¹。它们不消耗CPU,也不释放内存。

如何让进程在完成计算后释放内存?

谢谢!

¹“暂停”我的意思是他们在ps命令中的状态显示为“S +”

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;

3 个答案:

答案 0 :(得分:27)

您是否尝试使用pool.close关闭池,然后等待进程按pool.join完成,因为如果父进程继续运行并且不等待子进程,它们将变为{{3 }}

答案 1 :(得分:15)

尝试在池上设置maxtasksperchild参数。如果不这样做,则池会一次又一次地重复该过程,因此永远不会释放内存。设置后,将允许该过程死亡,并在其中创建一个新过程。这将有效地清理记忆。

我想这是2.7中的新内容:http://docs.python.org/2/library/multiprocessing.html#module-multiprocessing.pool

答案 2 :(得分:3)

您应该在close()对象上调用wait()后跟Pool

http://docs.python.org/library/multiprocessing.html#module-multiprocessing.pool

  

join()   等待工作进程退出。必须在使用join()之前调用close()或terminate()。