changeset: 100228:6197a09a56b1 parent: 100226:f98ed0616d07 user: Serhiy Storchaka date: Thu Feb 11 13:31:00 2016 +0200 files: Lib/os.py Misc/NEWS description: Issue #25995: os.walk() no longer uses FDs proportional to the tree depth. Different solution from 3.5. diff -r f98ed0616d07 -r 6197a09a56b1 Lib/os.py --- a/Lib/os.py Thu Feb 11 13:21:30 2016 +0200 +++ b/Lib/os.py Thu Feb 11 13:31:00 2016 +0200 @@ -356,6 +356,7 @@ dirs = [] nondirs = [] + walk_dirs = [] # We may not have read permission for top, in which case we can't # get a list of the files the directory contains. os.walk @@ -414,7 +415,7 @@ walk_into = not is_symlink if walk_into: - yield from walk(entry.path, topdown, onerror, followlinks) + walk_dirs.append(entry.path) # Yield before recursion if going top down if topdown: @@ -431,6 +432,9 @@ if followlinks or not islink(new_path): yield from walk(new_path, topdown, onerror, followlinks) else: + # Recurse into sub-directories + for new_path in walk_dirs: + yield from walk(new_path, topdown, onerror, followlinks) # Yield after recursion if going bottom up yield top, dirs, nondirs diff -r f98ed0616d07 -r 6197a09a56b1 Misc/NEWS --- a/Misc/NEWS Thu Feb 11 13:21:30 2016 +0200 +++ b/Misc/NEWS Thu Feb 11 13:31:00 2016 +0200 @@ -179,6 +179,8 @@ Library ------- +- Issue #25995: os.walk() no longer uses FDs proportional to the tree depth. + - Issue #25994: Added the close() method and the support of the context manager protocol for the os.scandir() iterator.