Quando os arquivos são fechados?
Como podemos aprender com O fechamento de arquivos é importante? (StackOverflow) , o interpretador Python fecha o arquivo nos seguintes casos:
- você invoca manualmente o método
close()
de um objetofile
explicitamente ou implicitamente, deixando um blocowith open(...):
. Isso funciona, claro, sempre e em qualquer implementação do Python. - a última referência do objeto
file
foi removida e, portanto, o objeto é processado pelo Garbage Collector. Este não é um recurso de linguagem, mas apenas uma característica especial da implementação do CPython, portanto, para portabilidade, não confie nisto! - o intérprete do Python termina. Nesse caso, deve fechar todas as alças de arquivos que foram abertas. Algumas versões mais antigas do Python3 também imprimiram um aviso de que você deveria tê-las fechado manualmente. No entanto, imagine uma falha ou você forçar a eliminação do interpretador Python e verá que isso também não é confiável.
Portanto, somente o primeiro método (manual) é confiável!
O que aconteceria se um arquivo permanecesse aberto?
Primeiro, dependendo da implementação do seu interpretador Python, se você abriu um arquivo com acesso de gravação, não pode ter certeza de que suas modificações foram liberadas no disco até que você o induza manualmente ou o manipulador de arquivos seja fechado. / p>
Em segundo lugar, você só pode abrir um número limitado de arquivos no seu sistema por usuário. Se você exceder esse limite, por exemplo, abrindo muitos arquivos em um loop em seu programa Python sem fechá-los o mais rápido possível, o sistema pode se recusar a abrir mais identificadores de arquivo para você e você receberá uma exceção. Também pode acontecer de o seu programa receber o último arquivo aberto permitido e outro programa falhar porque é recusado.
Em terceiro lugar, os arquivos abertos em um dispositivo removível evitam que ele seja desmontado ou ejetado. Você ainda pode excluir o arquivo em alguns sistemas de arquivos como ext4
, onde simplesmente o descritor de arquivo / link para o inode do arquivo é removido / desvinculado, mas o programa que abriu o arquivo ainda pode acessar o inode através de seu próprio manipulador de arquivo temporário. Isto é, e. também o mecanismo que permite atualizar pacotes enquanto o respectivo software está sendo executado. No entanto, por ex. O NTFS não possui esse recurso. No entanto, ele nunca pode ser modificado por dois processos simultâneos, portanto, ele ainda será de alguma forma bloqueado para outros.