160 votes

qu'est-ce exactement le python du fichier.flush() est en train de faire?

J'ai trouvé ça dans le Python de la documentation pour les Objets Fichier:

flush() n'est pas nécessairement écrire des données du fichier sur le disque. Utiliser la méthode flush (), suivie par l'os.fsync() pour s'assurer de ce comportement.

Donc ma question est: quel est exactement Python flush ? J'ai pensé qu'il oblige à écrire des données sur le disque, mais maintenant je vois que ça ne marche pas. Pourquoi? Merci d'avance

254voto

Lasse V. Karlsen Points 148037

Il existe en général deux niveaux de mise en mémoire tampon impliqués:

  1. Des tampons internes
  2. Système d'exploitation tampons

L'intérieur des tampons tampons créés par le moteur d'exécution/bibliothèque/la langue que vous êtes à la programmation contre et est destiné à accélérer les choses en évitant les appels système pour chaque écriture. Au lieu de cela, lorsque vous écrivez à un objet fichier, vous écrivez dans sa mémoire tampon, et chaque fois que le tampon est plein, les données sont écrites dans le fichier, à l'aide des appels système.

Cependant, en raison du système d'exploitation tampons, cela ne peut pas dire que les données sont écrites sur le disque. Il peut tout simplement dire que les données sont copiées de la mémoire gérée par votre moteur d'exécution dans les tampons maintenu par le système d'exploitation.

Si vous écrivez quelque chose, et il se termine dans la mémoire tampon (seulement), et que le courant est coupé à votre machine, et que les données n'est pas sur le disque lorsque l'ordinateur s'éteigne.

Donc, afin de les aider avec cela, vous avez l' flush et fsync méthodes, sur leurs objets respectifs.

La première, flush, tout simplement écrire toutes les données qui s'éternise dans un programme de la mémoire tampon de la taille réelle du fichier. Typiquement, cela signifie que les données seront copiées à partir du programme de la mémoire tampon pour le système d'exploitation de la mémoire tampon.

Précisément ce que cela signifie, c'est que si un autre processus a ce même fichier ouvert en lecture, il sera en mesure d'accéder aux données que vous venez vidé le fichier. Toutefois, cela ne signifie pas nécessairement qu'il a été "définitivement" stocké sur le disque.

Pour ce faire, vous devez appeler l' os.fsync méthode qui garantit à tous les système d'exploitation tampons sont synchronisés avec les périphériques de stockage, ils sont, en d'autres termes, cette méthode de copie des données à partir du système d'exploitation tampons sur le disque.

En général, vous n'avez pas besoin de s'embêter avec la méthode, mais si vous êtes dans un scénario où la paranoïa sur ce qui se termine effectivement en place sur le disque est une bonne chose, vous devez faire deux appels, comme indiqué.

11voto

Parce que le système d'exploitation ne peut pas le faire. L'opération de vidage de forces le fichier de données dans le fichier cache dans la RAM, et à partir de là, c'est le système d'exploitation du poste pour envoyer effectivement sur le disque.

7voto

Daи Points 975

Il vide la mémoire tampon interne, qui est censé provoquer l'OS pour écrire le contenu du buffer dans le fichier.[1] Python utilise le système d'exploitation par défaut du tampon, à moins que vous le configurez faire autrement.

Mais parfois, les OS encore choisit de ne pas coopérer. Surtout avec de merveilleuses choses comme l'écriture des retards dans Windows/NTFS. Fondamentalement, la mémoire tampon interne est vidé, mais le tampon de l'OS est toujours la conserver. Donc, vous avez à dire à l'OS de l'écrire sur un disque avec l' os.fsync() de ces cas.

[1] http://docs.python.org/library/stdtypes.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X