тесты: есть ли у python более быстрый способ обхода сетевой папки?

Оператор логического OR (||) - это оператор, который возвращает свой первый или второй операнд в зависимости от того, является ли первое правдоподобным. «Правное» значение означает все, кроме 0, undefined, null, "" или false.

Этот оператор использует короткое замыкание, что означает, что если первое выражение правда, тогда второе выражение не оценивается, и первый операнд немедленно возвращается. Это похоже на логический оператор И (&&) , который делает обратное: если первый операнд ложен, он возвращает его, в противном случае он возвращает второе выражение.

30
задан peter 13 August 2013 в 14:47
поделиться

1 ответ

Я устанавливаю структуру каталогов следующим образом:

for i in $(seq 1 4500); do
    if [[ $i -lt 100 ]]; then
        dir="$(for j in $(seq 1 $i); do echo -n $i/;done)"
        mkdir -p "$dir"
        touch ${dir}$i
    else
        touch $i
    fi
done

Это создает 99 файлов с путями глубиной 1-99 и 4401 файлом в корне структуры каталогов.

Я использовал следующий скрипт ruby:

#!/usr/bin/env ruby
require 'benchmark'

def recursive(path, bench)
  bench.report(path) do
    Dir["#{path}/**/**"]
  end
end

path = 'files'
Benchmark.bm {|bench| recursive(path, bench)}

Я получил следующий результат:

           user     system      total        real
    files/  0.030000   0.090000   0.120000 (  0.108562)

Я использую следующий скрипт на python, используя os.walk:

#!/usr/bin/env python

import os
import timeit

def path_recurse(path):
    for (path, dirs, files) in os.walk(path):
      for folder in dirs:
          yield '{}/{}'.format(path, folder)
      for filename in files:
          yield '{}/{}'.format(path, filename)

if __name__ == '__main__':
    path = 'files'
    print(timeit.timeit('[i for i in path_recurse("'+path+'")]', setup="from __main__ import path_recurse", number=1))

Я получил следующий результат:

    0.250478029251

Итак, похоже, что рубин все еще работает лучше. Было бы интересно посмотреть, как это работает с вашим набором файлов на сетевом ресурсе.

Вероятно, было бы также интересно увидеть, как этот скрипт запускается на python3 и с jython и, возможно, даже с pypy.

2
ответ дан Wren T. 13 August 2013 в 14:47
поделиться