Я использую os.walk
построить карту дата-магазин (эта карта используется в дальнейшем в инструмент, который я строю)os.walk очень медленный, любой способ оптимизировать?
Это код, который я в настоящее время используют:
def find_children(tickstore):
children = []
dir_list = os.walk(tickstore)
for i in dir_list:
children.append(i[0])
return children
Я сделал некоторый анализ по нему:
dir_list = os.walk(tickstore)
запускается мгновенно, если я ничего не делаю с dir_list
, то эта функция завершается мгновенно.
Это итерация свыше dir_list
, что занимает много времени, даже если я не делаю append
ничего, просто повторяя его, это то, что требует времени.
Tickstore
большое хранилище данных, с ~ 10 000 справочников.
В настоящее время для выполнения этой функции требуется около 35 минут.
Есть ли способ ускорить его?
Я рассмотрел альтернативы os.walk
, но ни один из них, казалось, не обеспечил большую часть преимуществ с точки зрения скорости.
'return [dir for dir, _, _ in os.walk (tickstore)]' может быть немного более эффективным, но доступ к жесткому диску относительно невелик в целом. – jonrsharpe
Что вы делаете с созданным списком детей? Может быть, вам даже не нужен весь список, поскольку следующая вещь, которую вы делаете, - это фильтровать/сканировать последовательность вещей? –
Я бы предположил еще медленнее, когда он обращается к сетевому диску? –