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 和文件名:
我有一个 Python 2.7.6 脚本,它将启动并行执行的线程(继承自 threading.Thread)。每个都将访问特定于线程的文件并在那里输出一些日志。
但是在我的主控制台中,我有时会收到一条消息“该进程无法访问该文件,因为它正被另一个进程使用。”。我不知道它来自哪个线程,也不知道这里提到的是哪个文件。
如何查询?
Process Monitor应该能帮上忙。
添加以下过滤器:
Process Name
-contains
-python
-Include
,因为你用的是PythonResult
-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 和文件名: