Question

J'ai un fichier ouvert pour l'écriture et un processus qui dure plusieurs jours - quelque chose est écrit dans le fichier à des moments relativement aléatoires. D'après ce que j'ai compris - jusqu'à ce que je file.close () - il est possible que rien ne soit vraiment enregistré sur le disque. Est-ce vrai?

Que se passe-t-il si le système se bloque lorsque le processus principal n'est pas encore terminé? Existe-t-il un moyen de s’engager une fois par ... disons - 10 minutes (et j’appelle cela commettre moi-même - pas besoin de lancer le chronomètre)? Est-ce que file.close () et open (fichier, 'a') sont le seul moyen ou existe-t-il de meilleures alternatives?

Était-ce utile?

La solution

Vous devriez pouvoir utiliser file.flush () pour ce faire.

Autres conseils

Si vous ne souhaitez pas supprimer le processus en cours en ajoutant f.flush () (vous avez l'impression que cela fonctionne déjà depuis des jours?), vous devriez être prêt. Si vous voyez que le fichier que vous écrivez grossit, vous ne perdrez pas ces données ...

À partir de la documentation Python:

  

write (str)       Ecrivez une chaîne dans le fichier. Il n'y a pas de valeur de retour. En raison de la mise en mémoire tampon,   la chaîne peut ne pas réellement apparaître dans   le fichier jusqu'au flush () ou fermer ()   La méthode est appelée.

Il semble que le système de mise en mémoire tampon de Python videra automatiquement les objets de fichier, mais cela n’est pas garanti.

Pour vous assurer que vos données sont écrites sur le disque, utilisez file.flush () suivi de os.fsync (file.fileno ()) .

Comme cela a déjà été indiqué, utilisez la méthode .flush () pour forcer l'écriture dans la mémoire tampon, mais évitez d'utiliser beaucoup d'appels pour vider, car cela risquerait de ralentir votre écriture (si l'application s'appuie sur des écritures rapides) car vous obligerez votre système de fichiers à écrire des modifications plus petites que la taille de la mémoire tampon, ce qui peut vous amener à genoux. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top