2010-09-15 7 views
15

Mi chiedo se shutlin.move di python sia atomico su linux? Il comportamento è diverso se i file di origine e di destinazione si trovano su due partizioni diverse o è uguale a quando sono presenti sulla stessa partizione?python è shutil.move() atomic su linux?

Sono più interessato a sapere se shutil.move è atomico se i file di origine e di destinazione si trovano sulla stessa partizione!

+0

Hai letto la fonte? È disponibile nella tua libreria Python sul tuo computer. Che cosa hai visto nel modulo 'shutil'? –

risposta

17

Non è atomico se i file si trovano su diversi filsystems. In tal caso, python apre il file di origine e destinazione, esegue il looping sulla lettura dall'origine e scrive sulla desinazione e infine scollega il file sorgente.

Se il file di origine e di destinazione si trovano sullo stesso file system, python utilizza la chiamata a nome rename(), che è atomica.

+0

thnx! cancella il dubbio! – Kisalay

+0

@AR Sì, lo è (su Linux almeno). Lo spostamento di una directory sullo stesso file system è un'operazione atomica. 'shutil.move ('/ tmp/aa /', '/ tmp/bb /' restituisce questa chiamata di sistema 'rename ("/tmp/aa ","/tmp/bb/aa ")'. Il nome della directory viene semplicemente spostato nel file system. – nos