代码之家  ›  专栏  ›  技术社区  ›  Nishant Florentin

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

  •  1
  • Nishant Florentin  · 技术社区  · 10 年前

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

    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块,在那里它试图用新的文件名移动它,但发现它被另一个进程使用了?

    如果我要写 shuil.move(快车移动) 作为Python线程的操作,是否有两个线程尝试执行相同的操作的可能性?或者这不会发生,因为有一个GIL锁强制顺序执行?

    在Windows中,一般来说,我可以同时打开两个文件进行写入吗?

    1 回复  |  直到 10 年前
        1
  •  1
  •   Martin Konecny    10 年前

    或者这不会发生,因为有一个GIL锁是按顺序发生的?

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

    它像舒蒂尔吗。try块中出错,因为文件已存在

    如果您的 shutil.move 失败,这意味着问题是读取源文件,而不是写入目标文件。还有另一个进程(或者在您自己的Python进程中更早?)它已经打开了文件,并且没有解除对文件的读取锁定。