Mojoliciousで並列WebAPIアクセスした結果を待ち合わせて処理する
とりあえずこんなんで、どうでしょう?
package Test::Web::Example; use Mojo::Base 'Mojolicious::Controller'; use Mojo::IOLoop::ForkCall; # This action will render a template sub welcome { my $self = shift; my @results; $self->render_later(); my $delay = Mojo::IOLoop->delay(sub { my ($delay, @args) = @_; $self->stash(result => "@results"); $self->render(); }); for my $i (1 .. 10) { my $end = $delay->begin; my $fc = Mojo::IOLoop::ForkCall->new; $fc->run( sub { # Web API Access code here ! sleep 1; return "$i"; }, sub { my ($fc, $err, $msg) = @_; push @results, $msg; warn "$msg"; $end->(); } ); } $delay->wait; } 1;