Memoize |
BasicWerk
EC Support
Technique
Facebook
|
20140830082259_Perl_get_http_status_template_memoize |
Perl_get_http_status_template_memoize
単純バージョン #! /usr/bin/perl use warnings; use strict; use LWP; use HTTP::Status; my $ua = LWP::UserAgent->new(); sub get_http_status { my ($url, $ua) = @_; return unless $url or $ua; my $response = $ua->head($url); my $msg = status_message($response->code); return $msg; } while (my $url=<>) { chomp $url; my $http_status = get_http_status($url, $ua); print "$url,$http_status\n"; }
サブルーチン化する程でもない。 URLが重複していてもリクエストしてしまう。 改善 #! /usr/bin/perl use warnings; use strict; use LWP; use HTTP::Status; my $ua = LWP::UserAgent->new(); my %memo; while (my $url=<>) { chomp $url; my $http_status = ""; if (exists $memo{$url}){ $http_status = $memo{$url}; } else { my $response = $ua->head($url); $http_status = $response->code; $memo{$url} = $http_status; } print "$url,$http_status\n"; }
ハッシュで Memoize するようにした。 入力はチェックしない。
# サンプルファイルは URL が 800 弱載ってる # ユニークだと 156 個の URL # 単純バージョン % time get_http_status.pl.bak imgurl.csv get_http_status.pl.bak imgurl.csv 1.10s user 0.31s system 12% cpu 11.605 total # 改善(memoize)バージョン % time get_http_status.pl imgurl.csv get_http_status.pl imgurl.csv 0.32s user 0.06s system 15% cpu 2.459 total
|
© Shin Nakamura/BasicWerk 2014 |