Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python多处理-处理完成后如何释放内存?_Python_Memory_Multiprocessing - Fatal编程技术网

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

Python多处理-处理完成后如何释放内存?,python,memory,multiprocessing,Python,Memory,Multiprocessing,我在使用python多处理库时遇到了一个奇怪的问题 我的代码如下所示:我为每个“symbol,date”元组生成一个进程。之后我将结果合并 我希望当一个进程对一个“symbol,date”元组进行计算时,它应该释放它的内存吗?显然情况并非如此。我看到数十个进程(尽管我将进程池设置为大小7)在计算机中被挂起。它们不消耗CPU,也不释放内存 如何让进程在完成计算后释放内存 谢谢 “”“suspended”是指他们在ps命令中的状态显示为“S+” 您可能应该在Pool对象上调用close(),然后调用

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

我的代码如下所示:我为每个“symbol,date”元组生成一个进程。之后我将结果合并

我希望当一个进程对一个“symbol,date”元组进行计算时,它应该释放它的内存吗?显然情况并非如此。我看到数十个进程(尽管我将进程池设置为大小7)在计算机中被挂起。它们不消耗CPU,也不释放内存

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

谢谢

“”“suspended”是指他们在ps命令中的状态显示为“S+”


您可能应该在
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;