我只使用一个大约 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() 的数百个线程可能会导致内存不足?如何调试此类问题?