タグ

coroに関するAOI-CATのブックマーク (4)

  • FurlX::Coro を使ってみたかった - はちゅにっき

    節電対応で休日が日・月になった hatyuki です。ということで、明日がおやすみ! 「DB から引っ張ってきた 5,000 件くらいの URL が、全部 HTTP Status Code 200 を返してくるか調べたいんだけど。」 という、なさそうでやっぱない依頼をうけたのでささっと書いてみることに。 ぱっと思いついたのはこんな感じ。 use strict; use warnings; use Furl; use My::Util qw/ db /; use Test::More; my $furl = Furl->new; my $itr = db->search('tables'); while (my $row = $itr->next) { my $res = $furl->head($row->url); is $res->code, 200, $row->url; } don

    FurlX::Coro を使ってみたかった - はちゅにっき
  • 測ってみた - あふひねこのにき

    前回のエントリーブクマコメントに、id:gfxさんからCoroからFurlを使う方法を書いていただいていたので、同じ環境でベンチしてみました。 gfx++ Coro+Furlのコードはhttps://gist.github.com/665488から。 use strict; use warnings; use 5.0100; use Furl; use AnyEvent::HTTP; use Coro; use Coro::Select; use Coro::AnyEvent; use Coro::Semaphore; use Benchmark qw/timethese cmpthese/; # request my $url = 'http://ext.nicovideo.jp/api/getthumbinfo/'; my $retry = 3; open my $fh, '<:utf

    測ってみた - あふひねこのにき
  • APIへの問い合わせを高速化したい - あふひねこのにき

    結論 Furlは非常に速い。でも、AnyEventの方が仕事が早く終わった。 今回は、相手サーバーが応答してデータを取得するまでの時間の方がボトルネック。 なお、結果として次の動画を作るのにとっても役に立った。 ときどきAEでAPI叩いているとエラーが返ってきましたけど。 背景 nicomas.sqlite用にデータを取得するperlスクリプトの実行に時間がかかっているのを何とかしたい。 135,000件以上の「アイドルマスター」タグのついた動画があるので、時間がかかるのはしょうがないけど、工夫できないだろうか。 なお、環境はstrawberry perl 5.12.1 built for MSWin32-x86-multi-threadをWindows XPで動かしています。 現状 タグ検索ページをスクレイピングして動画IDを取得 動画IDリストをもとに、APIへ問い合わせ 取得データを

    APIへの問い合わせを高速化したい - あふひねこのにき
  • おさかなラボ - Coroでより賢い非同期クローラを作る

    前回のエントリでは簡単なクローラの作り方を説明した。しかしこのクローラには欠点があり、取得したいURLが何千何万とある場合、一度にhttp_getが走ってしまい、リソースを使い切ったり同じサーバーへのアクセスを待つ間にタイムアウトしたりと都合が悪かった。そこで今回はAnyEventに加えCoroを使うことにより、並列を使ってリソースへの同時アクセス制限を行うクローラの書き方を解説する。 これは前回のエントリの改良版になるので、初めてこれを読む方は当該エントリを先に読んで頂きたい。 まず、前回はAnyEventを使い、condvarとsend-recvを使ってイベントの監視をしていたが、Coroと同時に使う場合これでは都合が悪い。イベントループを回す場合、一般的にAnyEventはrecvを、Coroはjoinを使うが、これらはどちらもイベントループが終わるまでブロックするのでどちらかし

  • 1