首页 > 解决方案 > 如何在python中写入大文件而不会使内存过载?

问题描述

我试图从一个非常大的 mysql 查询中获取结果并将它们写入 Python 中的文件,但我一直遇到内存过载错误。我已经轻松地攀升至 60+ GB 的内存利用率,直到我用完内存并崩溃。我如何有效地做到这一点?

这是我的代码片段:

with connection.cursor() as cursor:
    cursor.execute(my_query)
    row = cursor.fetchone()
    while row is not None:
        with open(my_file,'a+') as f:
            f.writelines(row)
        row = cursor.fetchone()

这仍然会使我的记忆超负荷,即使我原以为它一次只会有一行在内存中。

我还尝试在每一行使用 f.flush(),以及重新打开文件,然后在每一行运行 f.close()。

太感谢了!!

标签: pythonmysqlpython-3.xfile-io

解决方案


好的,@Willyzekid 为我指出了正确的方向,我想通了。除了存在游标内存问题之外,我使用这篇文章发现了这个问题:MySQLdb - 游标 - 内存泄漏?

我也没有意识到,在我的代码片段上方,我已经从一个查询中获取了输出,并将其用作片段中该查询的输入。我将第一个查询的输出加载到内存中,这也使其过载。@Willyzekid 强调了同样的问题,只是在代码中的不同位置。

谢谢!


推荐阅读