如果 os.walk 正在扫描的文件在执行期间发生更改,会发生什么情况?
What happens if the files being scanned by os.walk are changed during execution?
.NET 版本中有一个 ,但我特意询问 Python os.walk
函数。我用的是最新的 Python 3.
假设我有一个目录,里面有很多文件。我正在对每个文件执行一个需要一段时间的操作,为 root
目录留出足够的时间在循环中由另一个进程更改。为了清楚起见,这里有一个例子:
for root, dirs, files in os.walk(rootDirectory):
for file in files:
doAReallyLongBlockingCall(file)
os.walk
会检测到这样的变化吗?如果我添加文件,它们会被 os.walk
找到吗?
这与 os.walk 无关,而是 OS 的作用
在 linux 一旦你打开一个目录(有一个系统调用),数据不会在你手下改变
因此,如果在您的循环中您打开一个文件并花费 10 分钟来处理它并且其中一个未处理的文件被删除,walk 仍会为您提供名称,并且不会列出在 opendir 之后创建的任何文件
您将需要异常来处理您在获取文件之前丢失文件的情况
.NET 版本中有一个 os.walk
函数。我用的是最新的 Python 3.
假设我有一个目录,里面有很多文件。我正在对每个文件执行一个需要一段时间的操作,为 root
目录留出足够的时间在循环中由另一个进程更改。为了清楚起见,这里有一个例子:
for root, dirs, files in os.walk(rootDirectory):
for file in files:
doAReallyLongBlockingCall(file)
os.walk
会检测到这样的变化吗?如果我添加文件,它们会被 os.walk
找到吗?
这与 os.walk 无关,而是 OS 的作用 在 linux 一旦你打开一个目录(有一个系统调用),数据不会在你手下改变
因此,如果在您的循环中您打开一个文件并花费 10 分钟来处理它并且其中一个未处理的文件被删除,walk 仍会为您提供名称,并且不会列出在 opendir 之后创建的任何文件
您将需要异常来处理您在获取文件之前丢失文件的情况