WindowsError:[错误32]当我做shutil.move?

时间:2015-12-28 19:16:56

标签: python windows

我在except块中得到WindowsError: [Error 32] The process cannot access the file because it is being used by another process。怎么会发生这种情况?

try:
    shutil.move(os.path.join(folder, name), folder)
except shutil.Error:
    # Handling Error: Destination already exists
    unique_name = "%s_%s" %(name, time.time())
    shutil.move(os.path.join(folder, name), os.path.join(folder, unique_name))

假设我可以在Windows中处理这样的异常(我希望第一个shutil.move不会锁定文件或任何东西,如果有异常),是否像shutil.Error一样被引发try块,因为该文件已经存在并且它进入了except块,它尝试使用新文件名移动它只是为了找到它被另一个进程使用?

如果我将shutil.move操作编写为Python线程,那么两个线程是否可能尝试执行相同的操作?或者那不会发生,因为GIL锁定会强制执行顺序执行?

在Windows中,通常情况下,我可以同时打开两个文件进行写入吗?

1 个答案:

答案 0 :(得分:1)

  

或者那不会发生,因为GIL锁定是按顺序发生的?

即使线程按顺序发生,也并不意味着它们放弃了文件处理程序,这意味着当使用它的线程不活动时文件仍然被锁定。

  

就像shutil.Error在try块中发生了因为文件已经存在

如果shutil.move都失败了,那意味着问题在于读取源文件,而不是写入目标文件。还有另一个进程(或者在你自己的Python进程中可能更早?)打开了文件,并且没有取消对文件的读锁定。