【问题标题】:Memory consumption Python Pandas memory leak内存消耗 Python Pandas 内存泄漏
【发布时间】:2018-03-01 11:23:05
【问题描述】:

我正面临 Python 和 Pandas 的内存问题,

代码很简单,

for i in range(5):
    df = db_controller.read_from_database(i)   
    print(df)

df 是从数据库读取的 pandas Dataframe,每次迭代都会增加约 1Gb 的弹性内存,所有迭代都会从数据库中检索完全相同的数据。在我看来,对于每次迭代,弹性内存不应该增加,因为变量 df 超出范围(在新迭代中)。结果是,经过一些迭代后,弹性内存增加到 12 Gb,并且出现错误 OutOfMemory。

我已经尝试强制垃圾收集器:

for i in range(5):
    df = db_controller.read_from_database(i)   
    print(df)
    del df
    gc.collect()

结果是每次调用垃圾收集器时,大约 30Mb 从弹性内存中释放出来,但它无法释放应有的 1Gb。

谁能帮帮我?如何在每次迭代后完全释放 df DataFrame?

  • 我也试过删除 db_controller:

    from pyathenajdbc import connect
    import pandas as pd    
    
    for i in range(5):
        query = "select * from events.common_events limit 20000"
    
        conn = connect(s3_staging_dir=amazon_constants.AMAZON_S3_TABLE_STAGING_DIR,
                   region_name=amazon_constants.AMAZON_REGION)
        df = pd.DataFrame()
        try:
            df = pd.read_sql(query, conn)
        finally:
            conn.close()
    
        print(df)
        del df
        gc.collect()
    

【问题讨论】:

  • 我猜,对内存没有影响,但你试过df = None而不是del df吗?
  • 是的,我也试过了,效果一样
  • 你怎么知道是熊猫?我倾向于认为是 db_controller 没有释放内存,但是您没有提供有关 db_controller 的任何信息,所以很难说。 db_controller 必须是某个东西的实例,但是什么?
  • 感谢@JohnE 的帮助,我已经删除了对 db_controller 的调用,看看我修改了什么。结果还是一样...

标签: python pandas memory-leaks out-of-memory


【解决方案1】:

我没有尝试,但这应该可以:

from multiprocessing import Pool

def read_func():
    df = db_controller.read_from_database(i) 
    print(df)  

pool = Pool()
for i in range(5):
    pool.map(read_func)
    pool.close()
    pool.join()

因为多处理是操作系统级别的,与 pandas 无关。

【讨论】:

  • 感谢您的帮助@Alperen,我想找到一个不意味着让我的应用程序成为多线程的解决方案。
  • 那我建议你试试thisthis
  • @user1666191 你能试着告诉我它是否有效吗?我很好奇。
  • 我已经尝试过您的多处理解决方案,它有效,但我真的很想找到另一个解决方案。无论如何都非常感谢!
  • 不客气,我很高兴它有效。我在熊猫方面的经验不足,无法在不尝试我的代码的情况下告诉解决方案。我没有你的数据库,你的文件等。所以,我不能尝试。你拥有所有这些。试试我第一条评论中的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2010-12-23
  • 1970-01-01
  • 2014-03-24
  • 2012-12-02
  • 2011-12-13
  • 2014-02-26
相关资源
最近更新 更多