Как может я сохранять WWW:: Механизировать от следующих перенаправлений?

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

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.

11
задан brian d foy 26 May 2009 в 19:55
поделиться

3 ответа

WWW :: Mechanize является подклассом LWP :: UserAgent . Таким образом, вы можете использовать любые методы LWP :: UserAgent .

my $mech = WWW::Mechanize->new();
$mech->requests_redirectable([]);
10
ответ дан 3 December 2019 в 06:22
поделиться

WWW :: Mechanize - это подкласс LWP :: UserAgent; вы можете установить параметры max_redirect или requests_redirectable в конструкторе, как если бы вы использовали LWP :: UserAgent.

5
ответ дан 3 December 2019 в 06:22
поделиться

Вы можете использовать $ 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) - явно не Не следит за переадресацией.

4
ответ дан 3 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: