AnyEvent::Gearman::Worker
ちょっと勘違いしていた。pipeliningのようなことができるわけじゃないから、1つの接続で
非同期に処理をしてくれるわけじゃない。
これは結果、普通のworkerとほぼ同じになる
use AnyEvent::Gearman::Worker; my $worker = AnyEvent::Gearman::Worker->new( job_servers => ['127.0.0.1:4730'], ); $worker->register_function( 'sleep' => sub { my $job = shift; my $sleep = $job->workload; warn $sleep; my $t; $t = AnyEvent->timer( after => $sleep, cb => sub { warn "$sleep done!"; undef $t; $job->complete("$sleep done!"); } ); } ); AE::cv->recv;
非同期/パラレルを狙うならこうする(力技
my @workers; for ( 1 .. 4 ) { my $worker = AnyEvent::Gearman::Worker->new( job_servers => ['127.0.0.1:4730'], ); push @workers, $worker; $worker->register_function( 'sleep' => sub { my $job = shift; my $sleep = $job->workload; warn $sleep; my $t; $t = AnyEvent->timer( after => $sleep, cb => sub { warn "$sleep done!"; undef $t; $job->complete("$sleep done!"); } ); } ); } AE::cv->recv;
created by blog.nomadscafe.jp
コメント
コメントはありません
コメントを投稿
コメントを投稿するにはログインが必要です