2010-09-15 37 views
15

我想知道python的shutil.move在linux上是原子吗?如果源文件和目标文件位于两个不同的分区上,或者与它们出现在同一分区上时相同,则行为会有所不同吗?是linux上的python's shutil.move()原子吗?

我更关心的是,如果源文件和目标文件在同一分区上,shutil.move是否是原子的!

+0

您是否阅读过来源?它在您的计算机上的Python库中可用。你在'shutil'模块中看到了什么? – 2010-09-15 10:08:54

回答

17

如果文件位于不同的filsystems上,这不是原子。在这种情况下,python会打开源文件和目标文件,从源文件读取循环并写入目标文件并最终取消链接源文件。

如果源文件和目标文件在同一个文件系统上,python使用rename()C调用,这是原子的。

+0

thnx!这清除了怀疑! – Kisalay 2010-09-15 09:36:47

+0

@AR是的(至少在linux上)。在同一个文件系统上移动一个目录是一个原子操作。 'shutil.move('/ tmp/aa /','/ tmp/bb /'导致这个系统调用rename(“/ tmp/aa”,“/ tmp/bb/aa”)'。只是在文件系统中移动。 – nos 2013-09-24 14:15:33