python的shutil.move()在linux上是原子操作吗?
我在想,Python里的shutil.move在Linux系统上是不是原子操作?如果源文件和目标文件在不同的分区上,这个行为会不会有所不同?还是说在同一个分区上时表现是一样的?
我更关心的是,如果源文件和目标文件在同一个分区上,shutil.move是不是原子操作!
1 个回答
25
如果文件在不同的文件系统上,那就不是原子操作。也就是说,Python会先打开源文件和目标文件,然后循环读取源文件的内容并写入目标文件,最后再删除源文件。
但如果源文件和目标文件在同一个文件系统上,Python就会使用rename()这个C语言的调用,这样的操作是原子性的,也就是说要么全部成功,要么全部不做。