我只处理一个大约 4 MB 的 txt 文件,该文件需要频繁的 I/O,例如追加新行/搜索包含特定短语的特定行/用另一行替换特定行等。
为了“同时”处理文件,threading.RLock() 用于在资源运行时锁定资源。由于它不是一个大文件,我只是使用 readlines() 将它们全部读入列表并执行搜索工作,还使用 read() 读取整个文件文件到字符串 FileContent 中,并使用 FileContent.replace("demo", "test") 将某些短语替换为我想要的任何内容。
但问题是,我偶尔会遇到“MemoryError”,我的意思是有时每 3 或 4 天一次,有时更长,比如一周左右。我仔细检查了我的代码,每个线程结束时都没有未关闭的文件对象。至于文件操作,我简单的使用:
CurrentFile = open("TestFile.txt", "r")
FileContent = CurrentFile.read()
CurrentFile.close()
我想也许 python 没有像我预期的那样快速删除无用的变量,最终导致内存不足,所以我正在考虑使用 with 语句,这可能在垃圾收集中很快。我对这样的陈述没有经验,有人知道这是否有帮助吗?或者我的问题有更好的解决方案吗?
非常感谢。
补充:我的脚本会在短时间内进行大量替换,所以我猜测如果不快速删除 FileContent,数百个使用 FileContent = CurrentFile.read() 的线程可能会导致内存不足?如何调试此类问题?
请您参考如下方法:
如果不查看更多代码,就不可能知道内存不足的原因。 with 语句是打开文件并在完成后关闭文件的首选方式:
with open("TestFile.txt", "r") as current_file:
file_content = current_file.read()
(抱歉,变量的 UpperCamelCase 对我来说不合适...)
坦率地说,如果您真的像问题中显示的那样关闭文件,我怀疑这是否会解决您的问题,但这仍然是一个很好的做法。
