Python readlines () uso e prática eficiente para leitura

Eu tenho um problema para analisar 1000 de arquivos de texto (cerca de 3000 linhas em cada arquivo de tamanho ~ 400 KB) em uma pasta. Eu li-os usando readlines,

   for filename in os.listdir (input_dir) :
       if filename.endswith(".gz"):
          f = gzip.open(file, 'rb')
       else:
          f = open(file, 'rb')

       file_content = f.readlines()
       f.close()
   len_file = len(file_content)
   while i < len_file:
       line = file_content[i].split(delimiter) 
       ... my logic ...  
       i += 1  

Isso funciona completamente bem para amostra de minhas entradas (50.100 arquivos). Quando eu corri em toda a entrada mais de 5 mil arquivos, o tempo gasto foi longe de incremento linear. Eu planejei fazer uma análise de desempenho e fiz uma análise Cprofile. O tempo gasto para os arquivos aumentarem exponencialmente, atingindo taxas piores quando os dados chegam a 7 mil arquivos.

Aqui está o tempo acumulado para readlines, primeiro -> 354 arquivos (amostra da entrada) e segundos -> 7473 arquivos (entrada inteira)

 ncalls  tottime  percall  cumtime  percall filename:lineno(function)
 354    0.192    0.001    **0.192**    0.001 {method 'readlines' of 'file' objects}
 7473 1329.380    0.178  **1329.380**    0.178 {method 'readlines' of 'file' objects}

Por causa disso, o tempo gasto pelo meu código não é escalonado linearmente conforme a entrada aumenta. Eu li algumas notas de doc emreadlines(), onde as pessoas afirmaram que issoreadlines() lê todo o conteúdo do arquivo na memória e, portanto, geralmente consome mais memória em comparação comreadline() ouread().

Eu concordo com este ponto, mas deve o coletor de lixo limpar automaticamente o conteúdo carregado da memória no final do meu loop, portanto, a qualquer momento minha memória deve ter apenas o conteúdo do meu arquivo atualmente processado certo? Mas há alguma captura aqui. Alguém pode dar algumas dicas sobre esse problema?

Este é um comportamento inerente dereadlines() ou minha interpretação errada do coletor de lixo python. Bom saber.

Além disso, sugira algumas maneiras alternativas de fazer o mesmo na memória e no tempo de maneira eficiente. TIA.

questionAnswers(2)

yourAnswerToTheQuestion