]> granicus.if.org Git - python/commitdiff
Issue #25995: os.walk() no longer uses FDs proportional to the tree depth.
authorSerhiy Storchaka <storchaka@gmail.com>
Thu, 11 Feb 2016 11:31:00 +0000 (13:31 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Thu, 11 Feb 2016 11:31:00 +0000 (13:31 +0200)
Different solution from 3.5.

Lib/os.py
Misc/NEWS

index c3f674ec3d1ca246890a871084c7b64a30429928..0ea7b6275fd49779c1bb21a8bf8b2bb4bb063c99 100644 (file)
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -356,6 +356,7 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
 
     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 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
                     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 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
             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
 
index 92a210fe121cf20ce19fb4f6652231edd123b03d..0114a8670e7b8d8016f8293aeef01d5c1b945c07 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -179,6 +179,8 @@ Core and Builtins
 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.