AnyEvent-Gearman-WorkerPool
view release on metacpan or search on metacpan
lib/AnyEvent/Gearman/WorkerPool.pm view on Meta::CPAN
use AnyEvent::Gearman::WorkerPool::Slot;
has slotmap=>(is=>'rw', isa=>'HashRef', default=>sub{ return {}; });
has config=>(is=>'rw', isa=>'HashRef',required=>1);
has idle_watcher=>(is=>'rw');
has boss_channel=>(is=>'rw', default=>sub{time});
has reporters=>(is=>'rw');
sub BUILD{
my $self = shift;
my $conf = $self->config;
my %global = %{$conf->{'global'}};
my %baseconf = (
job_servers=>[''],
min=>1,
max=>1,
workleft=>0,
);
%global = (%baseconf,%global);
my @reporters;
my %confs = %{$conf->{slots}};
foreach my $worker (keys %confs){
my %conf = %{$confs{$worker}};
%conf = (%global,%conf);
DEBUG Dumper(\%conf);
my @slots;
foreach (0 .. $conf{max}-1){
my $slot = AnyEvent::Gearman::WorkerPool::Slot->new(
job_servers=>$conf{job_servers},
libs=>$conf{libs},
workleft=>$conf{workleft},
boss_channel=>$self->boss_channel,
worker_package=>$worker,
lib/AnyEvent/Gearman/WorkerPool.pm view on Meta::CPAN
my $cv = AE::cv;
my $sig = AE::signal 'INT'=> sub{
DEBUG "TERM!!";
$cv->send;
};
my $pool = AnyEvent::Gearman::WorkerPool->new(
config=>
{
global=>{ # common config
job_servers=>['localhost'], # gearmand servers
libs=>['./lib'], # perl5 library paths
max=>3, # max workers
},
slots=>{
'TestWorker'=>{ # module package name which extends AnyEvent::Gearman::WorkerPool::Worker.
min=>20, # min workers, count when started.
max=>50, # overrides global config's max. Workers will extend when all workers are busy.
workleft=>10, # workleft is life of worker. A worker will be respawned after used 10 times.
# if workleft is set as 0, a worker will be never respawned.
# this feature is useful if worker code may has some memory leaks.
},
# you can place more worker modules here.
}
}
);
$pool->start();
t/04-SlotManager.t view on Meta::CPAN
my $cv = AE::cv;
my $t = AE::timer 10,0,sub{ $cv->send('timeout')};
use_ok('Gearman::Server');
gstart($port);
my $slotman = AnyEvent::Gearman::WorkerPool->new(
config=>
{
global=>{
job_servers=>\@js,
libs=>['t/lib','./lib'],
max=>3,
},
slots=>{
'TestWorker'=>{}
}
},
port=>55595,
);
t/05-SlotManagerWork.t view on Meta::CPAN
DEBUG "TERM!!";
$cv->send;
};
my $t = AE::timer 10,0,sub{ $cv->send('timeout')};
my $slotman = AnyEvent::Gearman::WorkerPool->new(
config=>
{
global=>{
job_servers=>\@js,
libs=>['t/lib','./lib'],
max=>3,
},
slots=>{
'TestWorker'=>{
min=>3,
max=>5,
workleft=>10,
}
( run in 0.590 second using v1.01-cache-2.11-cpan-49f99fa48dc )