Прежде всего, не трогайте сборщик мусора. Это не проблема и не решение.
Похоже, что настоящая проблема у вас не в чтении файлов, а в структурах данных, которые вы выделяете при обработке файлов.
Кондерринг с использованием del для удаления структур, которые вам больше не нужны во время обработки. Кроме того, вы можете рассмотреть возможность использования marshal для выгрузки некоторых обработанных данных на диск во время обработки следующих 100 МБ входных файлов.
Для чтения файлов у вас есть два основных варианта: файлы в стиле Unix в виде потоков или файлы с отображением в памяти. Для файлов на основе потоков объект файла Python по умолчанию уже буферизован, поэтому простейший код также, вероятно, наиболее эффективен:
with open("filename", "r") as f:
for line in f:
# do something with a line of the files
Кроме того, вы можете использовать f.read ([размер]) для чтения блоков файла. Тем не менее, обычно вы делаете это для увеличения производительности процессора, используя многопоточность обрабатывающей части вашего скрипта, чтобы вы могли читать и обрабатывать одновременно. Но это не помогает с использованием памяти; фактически он использует больше памяти.
Другая опция - это mmap, которая выглядит следующим образом:
with open("filename", "r+") as f:
map = mmap.mmap(f.fileno(), 0)
line = map.readline()
while line != '':
# process a line
line = map.readline()
Это иногда превосходит потоки, но также не улучшает использование памяти.