Domanda

Ho un file aperto per la scrittura e un processo che dura da giorni - qualcosa è scritto nel file in momenti relativamente casuali. La mia comprensione è che - fino a quando non eseguo file.close () - c'è la possibilità che nulla venga salvato sul disco. È vero?

Cosa succede se il sistema si arresta in modo anomalo quando il processo principale non è ancora terminato? C'è un modo per eseguire il tipo di commit una volta ogni ... diciamo - 10 minuti (e lo chiamo io stesso - non è necessario eseguire il timer)? File.close () e open (file, 'a') è l'unico modo o ci sono alternative migliori?

È stato utile?

Soluzione

Dovresti essere in grado di usare file.flush () per farlo.

Altri suggerimenti

Se non vuoi interrompere il processo corrente per aggiungere f.flush () (sembra che sia già in esecuzione da giorni?), dovresti essere OK. Se vedi il file che stai scrivendo per ingrandirlo, non perderai quei dati ...

Dai documenti Python:

  

write (str)       Scrivi una stringa nel file. Non esiste un valore di ritorno. A causa del buffering,   la stringa potrebbe non apparire in realtà   il file fino a flush () o close ()   viene chiamato metodo.

Sembra che il sistema di buffering di Python scaricherà automaticamente gli oggetti file, ma non è garantito quando ciò accade.

Per assicurarti che i tuoi dati siano scritti su disco, usa file.flush () seguito da os.fsync (file.fileno ()) .

Come è stato già detto, utilizzare il metodo .flush () per forzare la scrittura dal buffer, ma evitare di utilizzare molte chiamate per svuotare poiché ciò può effettivamente rallentare la scrittura (se l'applicazione si basa su scritture veloci) poiché costringerai il tuo filesystem a scrivere modifiche più piccole della sua dimensione del buffer che possono metterti in ginocchio. :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top