Python pandas内存泄漏,读取csv

时间:2017-12-16 15:17:39

标签: python pandas memory-leaks

我正在处理巨大的csv并注意到它正在逐渐增加内存。经过大量的打印退出和分析后,我认为是因为大熊猫在从csv读取时没有删除前一个数据帧而创建新的数据帧。

我使用pympler muppy进行了分析。

下面我只是从csv读取4次迭代,它显示pandas.core.frame.Dataframe的大小不断增加

iterator = pd.read_csv(downloaded_file, chunksize=chunksize,
                                   compression='gzip', skipinitialspace=True, encoding='utf-8')
            i = 1
            for df in iterator:
                all_objects = muppy.get_objects()
                sum1 = summary.summarize(all_objects)
                summary.print_(sum1)
                i += 1
                if i < 5:
                    continue
                break

这给了我以下统计数据

                                types |   # objects |   total size
===================================== | =========== | ============
  <class 'pandas.core.frame.DataFrame |           1 |      4.04 MB


                                types |   # objects |   total size
===================================== | =========== | ============
  <class 'pandas.core.frame.DataFrame |           2 |      9.04 MB


                                types |   # objects |   total size
===================================== | =========== | ============
  <class 'pandas.core.frame.DataFrame |           3 |      14.02 MB

                                types |   # objects |   total size
===================================== | =========== | ============
  <class 'pandas.core.frame.DataFrame |           4 |      18.99 MB

我在6个进程中通过shell和多个子进程通过多处理池处理6个文件,每个超过10 gb。根据我的计算,我阅读的每个块几乎是2GB。因此,对于让我们说12进程它应该是24 gb并添加开销30 35gb ..但是我的脚本在内存中逐渐增加,并且随机间隔它也会大幅下降。但当它达到60gb这是我的服务器内存时,整个脚本都会被杀死。

这看起来内部有一些非线性的清理工作。

0 个答案:

没有答案