2010-09-15 9 views
15

Ich frage mich, ob python shuttil.move ist atomar auf Linux? Ist das Verhalten anders, wenn sich die Quell- und Zieldateien auf zwei verschiedenen Partitionen befinden oder wenn sie sich auf derselben Partition befinden?Ist python shutil.move() atomar auf Linux?

Ich bin mehr besorgt zu wissen, ob die shuthil.move atomaren ist, wenn die Quell-und Ziel-Dateien auf der gleichen Partition sind!

+0

Haben Sie die Quelle gelesen? Es ist in Ihrer Python-Bibliothek auf Ihrem Computer verfügbar. Was hast du im 'shuthil'-Modul gesehen? –

Antwort

17

Es ist nicht atomar, wenn die Dateien auf verschiedenen Filsystemen sind. In diesem Fall öffnet Python die Quell- und Zieldatei, führt beim Lesen aus der Quelle eine Schleife aus und schreibt in die Desination und hebt schließlich die Quelldatei auf.

Wenn sich Quell- und Zieldatei auf demselben Dateisystem befinden, verwendet python den Aufruf von rename() C, der atomar ist.

+0

thnx! Das löscht den Zweifel! – Kisalay

+0

@AR Ja, es ist (zumindest auf Linux). Das Verschieben eines Verzeichnisses auf demselben Dateisystem ist eine atomare Operation. 'shuthil.move ('/ tmp/aa /', '/ tmp/bb /' führt zu diesem Systemaufruf' rename ("/ tmp/aa", "/ tmp/bb/aa") '. Der Verzeichnisname wird nur im Dateisystem verschoben. – nos