如何在python中写大文件而不会使内存过载?

问题描述 投票:1回答:1

我正在尝试从一个很大的mysql查询中获取结果,并将其写入Python中的文件中,但是我一直遇到内存过载错误。在内存用完并崩溃之前,我已经轻松地将RAM利用率提高到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()。

非常感谢!

python mysql python-3.x file-io
1个回答
0
投票

[好吧,@ Willyzekid向我指出了正确的方向,我明白了。除了存在游标内存问题外,我通过这篇文章发现了这一问题:MySQLdb - cursor - memory leak?

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

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.