Я устанавливаю структуру каталогов следующим образом:
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.
WWW :: Mechanize
является подклассом LWP :: UserAgent
. Таким образом, вы можете использовать любые методы LWP :: UserAgent
.
my $mech = WWW::Mechanize->new();
$mech->requests_redirectable([]);
WWW :: Mechanize - это подкласс LWP :: UserAgent; вы можете установить параметры max_redirect или requests_redirectable в конструкторе, как если бы вы использовали LWP :: UserAgent.
Вы можете использовать $ agent-> max_redirect (0);, как в этом примере:
#!/usr/bin/perl -w
use strict;
use WWW::Mechanize;
my $agent = WWW::Mechanize->new( 'autocheck' => 1, 'onerror' => undef, );
$agent->max_redirect( 0 );
$agent->get('http://www.depesz.com/test/redirect');
printf("Got HTTP/%s from %s.\n", $agent->response->code, $agent->uri);
$agent->max_redirect( 1 );
$agent->get('http://www.depesz.com/test/redirect');
printf("Got HTTP/%s from %s.\n", $agent->response->code, $agent->uri);
При запуске выводит:
Got HTTP/302 from http://www.depesz.com/test/redirect.
Got HTTP/200 from http://www.depesz.com/.
Итак, с max_redirect (0) - явно не Не следит за переадресацией.