Я работаю только с одним txt-файлом, размер которого составляет около 4 МБ, и для этого файла часто требуется ввод-вывод, такой как добавление новых строк / поиск определенных строк, включающих определенные фразы / замена определенной строки другой строкой и т. Д.
Чтобы обработать файл «одновременно», 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 = CurrentFile.read () приведет к нехватке памяти, если FileContent не удаляется быстро?Как мне отладить такую проблему?