Ich möchte alle Dateien in einem Verzeichnisbaum mit einer bestimmten Dateierweiterung finden. Einige Ordner sind jedoch sehr groß und daher möchte ich diesen Vorgang stoppen, wenn es zu lange dauert (etwa 1 Sekunde). Meine aktuellen Code sieht in etwa wie folgt aus:Erzwingen von os.walk zu stoppen, wenn zu lange dauern
import os
import time
start_time = time.time()
file_ext = '.txt'
path = 'C:/'
file_list = []
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith(file_ext):
relDir = os.path.relpath(root, path)
relFile = os.path.join(relDir, file)
file_list.append(relFile)
if time.time() - start_time> 1:
break
if time.time() - start_time> 1:
break
Das Problem mit diesem Code ist, dass, wenn ich zu einem wirklich großen Unterordner bekommen, dieser Code nicht brechen, bis der Ordner vollständig durchlaufen wurde. Wenn dieser Ordner viele Dateien enthält, kann es viel länger dauern, als ich möchte. Kann ich irgendwie sicherstellen, dass der Code nicht viel länger als die zugewiesene Zeit läuft?
Edit: Beachten Sie, dass, obwohl es sicherlich hilfreich ist, Wege zu finden, um den Code zu beschleunigen (zum Beispiel mit os.scandir), diese Frage in erster Linie befasst sich mit einem laufenden Prozess zu töten.
setzen Sie es in eine Funktion und verwenden Sie Return? –
Leider ergibt das das gleiche Ergebnis. – matnor
Ihre Einrückung ist wahrscheinlich falsch dann ... versuchen Sie, Ihre Frage in Ihren Editor einfügen und sehen, ob es funktioniert –