python 2.7.6 threading on Windows 10 : 该进程无法访问该文件,因为它正被另一个进程使用

python 2.7.6 threading on Windows 10 : The process cannot access the file because it is being used by another process

我有一个 Python 2.7.6 脚本,它将启动并行执行的线程(继承自 threading.Thread)。每个都将访问特定于线程的文件并在那里输出一些日志。

但是在我的主控制台中,我有时会收到一条消息“该进程无法访问该文件,因为它正被另一个进程使用。”。我不知道它来自哪个线程,也不知道这里提到的是哪个文件。

如何查询?

Process Monitor应该能帮上忙。

添加以下过滤器:

  • Process Name - contains - python - Include,因为你用的是Python
  • Result - is - SUCCESS - Exclude,因为你对错误感兴趣
  • Result - is - BUFFER OVERFLOW - Exclude,因为缓冲区溢出是正常的(会增加缓冲区,重试读操作)

因此您应该能够找到共享违规:

既然您知道自己在寻找什么,您当然可以定义一个更简单的过滤器:

  • Result - is - SHARING VIOLATION - Include

在生产中应用之前测试设置的代码:

import shutil
with open("test.txt", "wb") as file:
    shutil.move("test.txt", "test2.txt")

双击条目应该会给你线程 ID 和文件名: