无法从内存中清除大量数据

时间:2019-05-11 21:34:51

标签: python memory

我正在[ { "week_number": 19, "month": "May", "year": 2019, "dates":[ 6,7,8,9,10 ] }, { "week_number": 20, "month": "May", "year": 2019, "dates":[ 13,14,15,16,17 ] } ] 中加载大量数据,这几乎填满了计算机中的全部内存。我一直在尝试通过调用 this.getDates(new Date(), (new Date()).addDays(14)); getDates(startDate, stopDate) { var dateArray = []; var currentDate = startDate; while (currentDate <= stopDate) { dateArray.push(currentDate) currentDate = currentDate.addDays(1); } return dateArray; } 或使用python 2.7.15rc1从内存中删除它,这是我的最终解决方案,将所有内容都移到del中,据我所知,应自行清理。

gc

不幸的是,我实际遇到的是当我按下main时所用的内存保持不变。这给我带来了问题,因为在此之后,我想调用失败的if __name__ == "__main__": main(args) gc.collect() print("sleeping") time.sleep(120) subprocess.call(["ls"]) ,因为它无法分配足够的内存(据我所知,sleep试图分配与已经分配或类似的东西。

有人知道这里发生了什么,我能做什么吗?

1 个答案:

答案 0 :(得分:1)

由于Python是垃圾回收语言,因此我们无法保证调用del或使用gc.collect()会立即将整个内存移回主进程,以供下一个操作使用。

作为一种解决方法,您可以从主进程中生成另一个线程,并在完成其任务后杀死该线程,以释放其内存。

import multiprocessing

def dfprocessing_func(data):
    # Execute task's code
    return df

p = multiprocessing.Pool(1)
df = p.map(dfprocessing_func, [data])[0]
p.terminate()
p.join()

基于Andrey Nikishaev ~ Why doesn't Python release the memory when I delete a large object?