Hatena::ブログ(Diary)

サンプルコードによるPerl入門 このページをアンテナに追加 RSSフィード

  サンプルコード中心のPerlの入門サイトです。現代的なPerl(v5.8.1以降)の書き方に準拠しています。モダンPerlを効率よく体系的に学習することができます。社内での勉強会や講習のテキストとしてもお使いください。またPerlの初学者の方にもぜひ教えてあげてください。Perlは実用的、高速で、業務を大幅に効率化できる、とても優れたプログラミング言語です。ぜひお役立てください。

2011-07-01

並列でHTTPリクエストを実行する / Mojolicious リファレンス

 このサンプルは間違っています。どこか勘違いしています。

 Mojoliciousというフレームワークには、非同期で並列でHTTPリクエストを実行することのできるMojo::UserAgentというモジュールがあります。Mojo::UserAgentを使うと並列処理を比較的簡単に書くことができます。

use strict;
use warnings;

use Mojo::UserAgent;

# URL
my @urls = ('http://www.google.co.jp', 'http://www.yahoo.co.jp');

# Paralell HTTP Request
my $ua = Mojo::UserAgent->new(max_redirects => 5);
my $finished = 0;
foreach my $url (@urls) {
    
    # Register GET request callback
    $ua->get($url => sub {
        my $tx = pop;
        
        print "##### $url #####\n" . $tx->res->body . "\n";
        
        # Count up
        $finished++;
        
        # Stop IO loop if all requiests is finished
        Mojo::IOLoop->stop if $finished eq @urls;
    });
}

# Parallel count
Mojo::IOLoop->max_connections(5);

# Start IO loop
Mojo::IOLoop->start;

 並列処理というのは普段行っているプログラミングから頭を少し切り替える必要があります。普段行っているプログラミングは、順番に処理を書いていくというやりかたです。並列処理のプログラミングでは次のように考えます。

  1. HTTPリクエストを実行して返ってきたときに実行する処理(コールバック)を登録する
  2. 並列処理を開始する
  3. ある条件になれば並列処理を停止する

 上記のソースコードは上記のような記述になっていることがわかります。コールバックでは、取得したWebページの内容を表示し、すべてのリクエストを投げ終えたときに、並列処理を停止するというコードを書いています。ソースコードの一番最後ではMojo::IOLoopクラスのstartメソッドを使って並列処理を開始しています。また並列処理の同時実行数はMojo::IOLoopクラスのmax_connectionsメソッドで指定することができます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/perlcodesample/20110701/1312267537