há COMMIT analógico em python para escrever em um arquivo?
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?
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. :)