AnyEvent-Gearman-WorkerPool
view release on metacpan or search on metacpan
lib/AnyEvent/Gearman/WorkerPool/Slot.pm view on Meta::CPAN
package AnyEvent::Gearman::WorkerPool::Slot;
# ABSTRACT: Slot class
our $VERSION = '1.0'; # VERSION
use Log::Log4perl qw(:easy);
use Moose;
use AnyEvent;
use AnyEvent::Gearman::WorkerPool::Worker;
use Data::Dumper;
has libs=>(is=>'rw',isa=>'ArrayRef',default=>sub{[]});
has job_servers=>(is=>'rw',isa=>'ArrayRef',required=>1);
has workleft=>(is=>'rw');
has worker_package=>(is=>'rw');
has worker_channel=>(is=>'rw');
has is_busy=>(is=>'rw',default=>0);
has is_stopped=>(is=>'rw',default=>1);
has boss_channel=>(is=>'rw',default=>'');
has worker_watcher=>(is=>'rw');
has worker_pid=>(is=>'rw');
sub BUILD{
my $self = shift;
}
sub is_idle{
my $self = shift;
return ($self->is_running)&&(!$self->is_busy);
}
sub is_running{
my $self = shift;
return (!$self->is_stopped);
}
sub stop{
DEBUG 'stop called';
my $self = shift;
$self->is_stopped(1);
if( $self->worker_pid ){
kill INT => $self->worker_pid;
}
}
sub start{
my $self = shift;
my $cpid = fork();
if( $cpid ){
$self->worker_pid($cpid);
$self->worker_watcher( AE::child $cpid, sub{
my ($pid,$status) = @_;
if( $self->is_stopped != 1){
DEBUG '------------------ child restart ------------------------';
$self->start();
}
else{
DEBUG 'kill child OK';
$self->worker_pid(undef);
$self->worker_watcher(undef);
}
});
$self->is_stopped(0);
}
else{
my $class = $self->worker_package;
my $boss_channel = $self->boss_channel;
( run in 1.741 second using v1.01-cache-2.11-cpan-39bf76dae61 )