Pergunta

Eu tenho um arquivo aberto para escrita, e um processo em execução por dias - algo que está escrito no arquivo em momentos relativamente aleatórios. O meu entendimento é - até que eu faça File.Close () - há um nada oportunidade é realmente gravada no disco. Isso é verdade?

E se o sistema falhar quando o processo principal ainda não está terminado? Existe uma maneira de fazer tipo de cometer uma vez ... Diga - 10 minutos (e eu chamo isso de comprometer-me - não há necessidade de temporizador prazo)? É File.Close () e aberto (arquivo, 'a') a única maneira, ou existem melhores alternativas?

Foi útil?

Solução

Você deve ser capaz de usar file.flush() para fazer isso.

Outras dicas

Se você não quer matar o processo atual para adicionar f.flush() (parece que ele foi executado por dias já?), Você deve estar OK. Se você ver o arquivo que você está escrevendo para ficar maior, você não perderá os dados ...

De docs Python:

write (str) Escreve uma string para o arquivo. Não há reembolso. Devido ao tamponamento, a string não pode realmente aparecer em o arquivo até o flush () ou close () método é chamado.

Parece sistema de tamponamento do Python objetos de arquivo automaticamente descarga, mas não é garantido quando isso acontece.

Para se certificar de que você está dados são gravados no disco, uso file.flush() seguido por os.fsync(file.fileno()).

Como já foi dito uso o método .flush () para forçar a gravação fora do buffer, mas evite usar um monte de chamadas para nivelada como isso pode realmente diminuir a sua escrita para baixo (se o aplicativo se baseia em gravações rápidas) como você vai estar forçando seu sistema de arquivos para gravar alterações que são menores do que o tamanho do buffer que pode levá-lo a seus joelhos. :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top