Seite 1 von 1

Atomic Write

Verfasst: Samstag 18. September 2010, 16:41
von name
Habe mir einen kleinen Context-Manager gebastelt um atomisch in Dateien zu schreiben. Er erstellt eine temporäre Datei, welche dann, sobald das Schreiben vollständig ist, auf den Platz der eigentlichen Datei renamed wird. Es wird zudem versucht, auch unter Windows (entsprechend der Möglichkeiten, die die jeweilige Windows- und Python-Version anbietet), atomisch zu sein.

Zu finden ist der unter der X11-Lizenz stehende Code unter http://github.com/segfaulthunter/sandbo ... icwrite.py und ich würde mich über Kommentare freuen.

Re: Atomic Write

Verfasst: Samstag 18. September 2010, 17:30
von lunar
Bist Du sicher, dass diese Art, "a" zu simulieren, funktioniert? Die Kopie erfolgt ja nach dem Öffnen der temporären Datei, und ich glaube nicht, dass ein geöffneter Dateideskriptor nachträgliche Änderungen an der darunter liegenden Datei so ohne Weiteres übernimmt.

Ach ja, gibt es einen speziellen Grund, warum Du __init__ nicht NamedTemporaryFile verwendest, und warum Du in __exit__ explizit ".flush()" aufrufst?

Re: Atomic Write

Verfasst: Samstag 18. September 2010, 17:31
von name
lunar hat geschrieben:Bist Du sicher, dass diese Art, "a" zu simulieren, funktioniert? Die Kopie erfolgt ja nach dem Öffnen der temporären Datei, und ich glaube nicht, dass ein geöffneter Dateideskriptor nachträgliche Änderungen an der darunter liegenden Datei so ohne Weiteres übernimmt.

Ach ja, gibt es einen speziellen Grund, warum Du __init__ nicht NamedTemporaryFile verwendest, und warum Du in __exit__ explizit ".flush()" aufrufst?
Die Simulation von 'a' funktioniert, ja, zumindest unter Unix. Und NamedTemporaryFile hat in 2.5 kein delete Attribut, deshalb mach ich das manuell. Werde das mit 'a' später unter Windows testen, im Notfall eben zum Dateiende seeken.

Re: Atomic Write

Verfasst: Samstag 18. September 2010, 17:42
von lunar
@name: Danke für die (zu) schnelle Antwort. Die Frage nach der Simulation von "a" wollte ich eigentlich gerade wieder entfernen ...

Re: Atomic Write

Verfasst: Samstag 18. September 2010, 19:45
von BlackJack
Boah dieses Denglisch ist ja furchtbar. "atomic" heisst auf Deutsch "atomar" und statt "renamed" darf man ruhig "umbenannt" schreiben.

Re: Atomic Write

Verfasst: Samstag 18. September 2010, 19:46
von name
BlackJack hat geschrieben:Boah dieses Denglisch ist ja furchtbar. "atomic" heisst auf Deutsch "atomar" und statt "renamed" darf man ruhig "umbenannt" schreiben.
Naja, umbenannt impliziert nicht mehr, dass `rename` benutzt wird, und atomisch existiert: „ato|misch <Adj.>: (schweiz.) atomar: das -e Potenzial.”

Aber ich denke, diese Meta-Diskussion hier weiter auszuführen, würde das Thema des Beitrages um weites verfehlen.

Re: Atomic Write

Verfasst: Sonntag 19. September 2010, 10:22
von lunar
@name: Was, wenn nicht rename(), sollte denn sonst zum Umbenennen benutzt werden? Davon abgesehen ist es doch eigentlich vollkommen egal, wie der Quelltext funktioniert, solange er korrekt funktioniert ... das ist ja der Sinn der Wiederverwendung von Quelltext.