在ProcessPoolExecu中打开pandas数据帧时不会释放内存

2024-04-25 19:34:47 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是一个非常简单的代码示例。。。在

from concurrent.futures import ProcessPoolExecutor
import pandas


if __name__ == "__main__":

    def i_use_lots_of_memory():
        print 'doing something that uses a lot of memory'
        data = pandas.read_csv('large_txt_file.txt')
        del data
        # do other things here as soon as I've solved mem usage issues
        print 'ha ha  I used up a ton of memory.'

    def simplest_callback_ever(future):
        _ = future.result()
        print 'callback was run'


    class ManagesFileReading(object):
        def __init__(self):
            self.pool = ProcessPoolExecutor(max_workers=24)

        def add_job(self, callback=None):
            future = self.pool.submit(i_use_lots_of_memory)
            if callback:
                future.add_done_callback(callback)


    mfr = ManagesFileReading()
    mfr.add_job(simplest_callback_ever)

在本例中,我打开一个800MB的文本文件,它占用大约2GB的内存。输出是。。。在

^{2}$

所以任务完成了,问题是内存永远不会释放。即使未来已经完成,它也不会释放记忆。唯一可以释放它的方法是通过运行self关闭进程池_池.关机()

除非我误解了ProcessPoolExecutor是如何工作的,否则当回调函数完成时,就意味着任务完成了,对吧?为什么不删除未来,释放内存?有什么想法吗?在


Tags: of内存importselfaddpandasifuse