Issue #25995: os.walk() no longer uses FDs proportional to the tree depth.
Different solution from 3.5.
This commit is contained in:
parent
ffe96ae10b
commit
7c90a82a01
|
@ -356,6 +356,7 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
|
||||||
|
|
||||||
dirs = []
|
dirs = []
|
||||||
nondirs = []
|
nondirs = []
|
||||||
|
walk_dirs = []
|
||||||
|
|
||||||
# We may not have read permission for top, in which case we can't
|
# 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
|
# get a list of the files the directory contains. os.walk
|
||||||
|
@ -414,7 +415,7 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
|
||||||
walk_into = not is_symlink
|
walk_into = not is_symlink
|
||||||
|
|
||||||
if walk_into:
|
if walk_into:
|
||||||
yield from walk(entry.path, topdown, onerror, followlinks)
|
walk_dirs.append(entry.path)
|
||||||
|
|
||||||
# Yield before recursion if going top down
|
# Yield before recursion if going top down
|
||||||
if topdown:
|
if topdown:
|
||||||
|
@ -431,6 +432,9 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
|
||||||
if followlinks or not islink(new_path):
|
if followlinks or not islink(new_path):
|
||||||
yield from walk(new_path, topdown, onerror, followlinks)
|
yield from walk(new_path, topdown, onerror, followlinks)
|
||||||
else:
|
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 after recursion if going bottom up
|
||||||
yield top, dirs, nondirs
|
yield top, dirs, nondirs
|
||||||
|
|
||||||
|
|
|
@ -179,6 +179,8 @@ Core and Builtins
|
||||||
Library
|
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
|
- Issue #25994: Added the close() method and the support of the context manager
|
||||||
protocol for the os.scandir() iterator.
|
protocol for the os.scandir() iterator.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue