Questão Por que a abertura de vários arquivos está demorando tanto?


Recentemente, eu perguntei o seguinte pergunta sobre SO:

Eu tenho uma pasta foo com milhares .html arquivos de cerca de 300 Kb cada.

Aqui está o que eu faço para abri-los:

 import os
 import time

 folder_name = 'foo'
 for file_name in os.listdir(folder_name):
     t = time.time()
     with open(os.path.join(folder_name, file_name)) as f:
         print(time.time() - t, 'seconds to open', file_name)

E aqui está a saída que recebo:

 1.6057319641113281 seconds to open 1.html
 1.3181514739990234 seconds to open 2.html
 1.1490132808685303 seconds to open 3.html
 1.2970092296600342 seconds to open 4.html
 1.0074846744537354 seconds to open 5.html
 1.5122349262237549 seconds to open 6.html
 1.1730327606201172 seconds to open 7.html
 1.9992561340332031 seconds to open 8.html

 etc.

Eu tenho um SSD e estou muito surpreso que leva mais de um segundo para abrir um pequeno arquivo.

Isso é normal? Se não, o que pode ser feito para acelerar?

Eu erroneamente pensei que o meu problema era específico do Python. Agora eu tentei em outro PC e leva milissegundos (como deveria).

Além disso, compactar muitos arquivos pequenos também leva cerca de 1 segundo por arquivo. Portanto, o problema é que o Windows 10 leva mais de um segundo para abrir um arquivo.

Existe alguma coisa que eu possa fazer sobre isso? (exceto reinstalar a coisa toda)


1


origem


Poderia ser a proteção antivírus em tempo real que está atrasando a abertura de arquivos? Tente desativar o antivírus temporariamente enquanto você executa novamente o teste. Caso contrário, você precisará usar um monitor de desempenho para descobrir onde o programa está gastando seu tempo. By the way, eu não sei Python, mas você não deve fechar cada arquivo após a abertura, ou isso é implícito reutilizando o mesmo f em cada passagem? Milhares de identificadores de arquivos abertos seriam obrigados a ter um impacto no desempenho. - AFH
@AFH with faz o fechamento quando a execução deixa de ser seu escopo. - gronostaj
@gronostaj - Obrigado, eu estava apenas adivinhando: da minha experiência de linguagens anteriores, como Fortran, PL / 1 e C, sobrescrevendo um ponteiro de arquivo era um bom era vazar alças. - AFH
@AFH: Desativei a "proteção em tempo real" do Windows Defender e o problema desapareceu. Muito Obrigado! Por favor poste-o como resposta para que eu possa aceitá-lo. Mas ainda é estranho: o outro PC que eu experimentei tinha essa "proteção em tempo real", mas não causou nenhum problema lá. - Leo


Respostas:


Pode ser que a proteção antivírus em tempo real esteja atrasando a abertura de arquivos. Você pode testar se esta é a causa, desativando temporariamente o AV enquanto você executa novamente o teste.

De seus comentários, não posso explicar por que haveria uma diferença entre duas máquinas diferentes se elas estivessem executando o mesmo software antivírus, a menos que as configurações sejam diferentes, incluindo quaisquer exclusões de pasta ou de tipo de arquivo.

Se as diferenças de configurações não forem a causa, você precisará usar um monitor de desempenho para descobrir onde o verificador em tempo real do AV está gastando seu tempo.


1