python - 如何在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()。
太感谢了!!
解决方案
好的,@Willyzekid 为我指出了正确的方向,我想通了。除了存在游标内存问题之外,我使用这篇文章发现了这个问题:MySQLdb - 游标 - 内存泄漏?
我也没有意识到,在我的代码片段上方,我已经从一个查询中获取了输出,并将其用作片段中该查询的输入。我将第一个查询的输出加载到内存中,这也使其过载。@Willyzekid 强调了同样的问题,只是在代码中的不同位置。
谢谢!
推荐阅读
- spring-boot - Spring Boot JPA 数据库凭证
- xcode - 如何使用 Xcode 编译(“Command /usr/bin/make failed with exit code 2”)?
- spring-webflux - WebFlux:只有一个项目到达后端
- css - 如何使用 CSS Grid 和/或/不使用 Flexbox 制作自适应响应式灵活标题?
- arrays - 根据数组的值和另一个数组的值更新数组
- php - 使用 ajax 的 wordpress 更新 postmeta 不起作用
- javascript - 在 JS 对象中。为什么原型和构造函数总是相互嵌套
- c# - 动态保存文件 .net core
- sed - 得到一切直到美元符号,但如果没有美元符号存在
- python - Beautiful Soup 将 < 替换为 <