我正在编写一个 python 脚本,它在 Linux 上使用 shutil.copyfile() 复制文件。在复制过程中,其他进程可能正在尝试读取文件。以下是否足以确保外部进程不会获得损坏的文件 View ?
os.unlink(dest)
shutil.copyfile(src, dest)
也就是说,shutil.copyfile() 是否具有原子性,以至于其他进程在复制操作完成之前无法读取目标文件?
最佳答案
不,shutil.copyfile
不是原子的。这是 definition of shutil.copyfile
: 的一部分
def copyfile(src, dst, *, follow_symlinks=True):
...
with open(src, 'rb') as fsrc:
with open(dst, 'wb') as fdst:
copyfileobj(fsrc, fdst)
其中
copyfileobj
is defined like this :def copyfileobj(fsrc, fdst, length=16*1024):
while 1:
buf = fsrc.read(length)
if not buf:
break
fdst.write(buf)
调用
copyfile
的线程可以在这个 while-loop
中停止,此时其他一些进程可以尝试打开要读取的文件。它将获得损坏的文件 View 。关于python - python的shutil.copyfile()是原子的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20873723/