読者です 読者をやめる 読者になる 読者になる

理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

Gearman クライアント側

とりあえず動いてはいるんだけど、Gearman::Task への scalarref の渡し方ってもっとキレいなかんじになるんじゃないかっていう感じする。

my $client;

sub _setup_client {
    my ($servers) = @_;

    $client ||= Gearman::Client->new( job_servers => $servers );;
    return $client;
}

sub download :Local {
    my ($self, $c, $videoid ) = @_;

    my $server = $c->config->{myapp}->{gearman}->{server};
    $c->log->info("server: $server");

    my $client = _setup_client([$server]);
    my $freeze = freeze(\$videoid);
    
    my $task   = Gearman::Task->new( 'download', \$freeze, {
        uniq        => 1,
        on_complete => sub { $c->log->info("task for $videoid completes."); },
        on_fail     => sub { $c->log->error("task for $videoid fails."); },
    });
    $client->dispatch_background($task);
}