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

34
我在使用Python的multiprocessing库时遇到了一个奇怪的问题。
我的代码如下:我为每个“symbol, date”元组生成一个进程,之后再将结果合并。
我期望当一个进程完成“symbol, date”元组的计算后,它应该释放内存。但显然情况并非如此。我看到有很多进程(尽管我将进程池的大小设置为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个回答

33

您是否尝试使用pool.close方法关闭进程池,然后通过pool.join等待子进程退出呢?因为如果父进程继续运行并且不等待子进程退出,子进程将会变成僵尸进程


1
这是我的脚本导致节点重新启动的根本原因,因为消耗了4Gb内存的>90% :) 谢谢! - Dima Naychuk

23

1
我一直在使用这种方法,效果很好。问题是,为什么它不释放内存?或者可能不够快...?? - Elvin
这完全解决了我的问题,感谢 @user1914881 - Scottymac

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接