タグ

AnyEventに関するAOI-CATのブックマーク (5)

  • 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への問い合わせを高速化したい - あふひねこのにき
  • ブロッキングする処理を外部プロセスに任せる - AnyEvent::Workerを使ってみた - download_takeshi’s diary

    AnyEventを使う場合に、どうしてもブロッキングしてしまうような処理があるとして、それを外部プロセスとして切り出しつつ、メインのイベントループの中に取り込みたいんだよな、と。 そんな時はAnyEvent::Workerがよさそうです。 AnyEvent::Worker - Manage blocking task in external process http://search.cpan.org/~mons/AnyEvent-Worker/ POEで言うところのPOE::Component::Genericのようなものらしいです。使いこなせるようになるといろいろと便利! use strict; use warnings; use AnyEvent; use AnyEvent::Worker; $|++; print _timestamp(), "開始しまーす\n"; my $cv =

    ブロッキングする処理を外部プロセスに任せる - AnyEvent::Workerを使ってみた - download_takeshi’s diary
  • AnyEventでの簡単なFIFOキューの作り方 - D-6 [相変わらず根無し]

    AnyEventでの簡単なFIFOキューの作り方 まぁ考えてみれば単純な話ですけど、いわゆるGuardを使うとよいです。参考はAnyEvent::HTTP コールバック$cbの最初の引数をguard変数にしておき、キューの1スロットを使用している間はこのguard変数をundefしないようにしておく感じです。 use strict; use AnyEvent; use AnyEvent::Util; my @q; # 実際にコールバックを入れておくところ my $ACTIVE = 0; # 現在の使用中スロット my $MAX_ACTIVE = 1; # 最大何個のコールバックを「同時」に行うか(もちろん当に同時じゃないよ!) sub drain_queue { while ( @q && $ACTIVE < $MAX_ACTIVE ) { if (my $cb = shift @q)

  • YappoLogs: 最新 CPAN モジュールをつぶやく Twitter BOT それAnySanで

    最新 CPAN モジュールをつぶやく Twitter BOT それAnySanで ほんっと奇遇なんですけど。ちょうたまたまなんですけど。AnySanにFriendFeed対応した所に。いや当に偶然なんですけど。 最新 CPAN モジュールをつぶやく Twitter BOT を書いた - punitanのメモっていうエントリを見たので。 ほんと、超偶然なんですけどAnySanでもFriendFeedをリアルタイムで処理出来るようになっちゃってたので、ほんと偶然だけど。 なので、CPAN - FriendFeedからリアルタイムでデータを取ってきてTwitterで呟くbotを書いてみました。 たまたま、AnySan::Provider::Twitterでも、streaming apiを使わないモードとかを実験的に付けたので(偶然ですけど)、無駄なストリーミングAPIの接続もしません。 Any

  • おさかなラボ - Coroでより賢い非同期クローラを作る

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

  • 1