Windows 10上的python 2.7.6线程:该进程无法访问该文件,因为该文件正在被另一个进程使用

问题描述

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

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

如何查询

解决方法

Process Monitor应该可以提供帮助。

添加以下过滤器:

  • $ env|grep sock all_proxy=socks5://127.0.0.1:7891 -$ lsof -i:7891 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ClashX 98115 dolphin 13u IPv4 0x4b43c23bd07f129f 0t0 TCP localhost:7891 (LISTEN) ClashX 98115 dolphin 15u IPv4 0x4b43c23ba89936af 0t0 UDP localhost:7891 -Process Name-contains,因为您使用的是Python
  • python-Include-Result-is,因为您对错误感兴趣
  • SUCCESS-Exclude-Result-is,因为缓冲区溢出是正常的(缓冲区会增加,读取操作会重试)

因此,您应该可以找到共享冲突:

Sharing violation

现在,您知道要查找的内容了,当然可以定义一个更简单的过滤器:

  • BUFFER OVERFLOW-Exclude-Result-is

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

SHARING VIOLATION

双击条目应为您提供线程ID和文件名:

Details