Event-ExecFlow
view release on metacpan or search on metacpan
lib/Event/ExecFlow/Scheduler/SimpleMax.pm view on Meta::CPAN
package Event::ExecFlow::Scheduler::SimpleMax;
use strict;
use base qw ( Event::ExecFlow::Scheduler );
sub get_max { shift->{max} }
sub get_cnt { shift->{cnt} }
sub set_max { shift->{max} = $_[1] }
sub set_cnt { shift->{cnt} = $_[1] }
sub new {
my $class = shift;
my %par = @_;
my ($max) = $par{'max'};
return bless {
max => $max,
cnt => 0,
}, $class;
}
sub schedule_job {
my $self = shift;
my ($job) = @_;
my $state;
if ( $self->get_cnt >= $self->get_max ) {
$state = 'sched-blocked';
}
elsif ( $job->get_type ne 'group' ) {
++$self->{cnt};
$state = 'ok';
}
else {
$state = 'ok';
}
return $state;
}
sub job_finished {
my $self = shift;
my ($job) = @_;
--$self->{cnt} if $job->get_type ne 'group';
1;
}
1;
__END__
=head1 NAME
Event::ExecFlow::Scheduler::SimpleMax - Limit number of parallel executed jobs
=head1 SYNOPSIS
#-- Create a new Scheduler object
my $scheduler = Event::ExecFlow::Scheduler::SimpleMax->new( max => 5 );
#-- Attach scheduler to a group job
$group_job->set_parallel(1);
$group_job->set_scheduler($scheduler);
=head1 DESCRIPTION
This is a simple scheduler which just limits the maximum number
of parallel executed jobs. It's mainly an example implementation
of the Event::ExecFlow::Scheduler interface, not really of big
practical use ;)
=head1 OBJECT HIERARCHY
Event::ExecFlow
Event::ExecFlow::Job
+--- Event::ExecFlow::Job::Group
+--- Event::ExecFlow::Job::Command
+--- Event::ExecFlow::Job::Code
Event::ExecFlow::Frontend
Event::ExecFlow::Callbacks
Event::ExecFlow::Scheduler
+--- Event::ExecFlow::Scheduler::SimpleMax
=head1 METHODS
[ FIXME: describe all methods in detail ]
( run in 1.124 second using v1.01-cache-2.11-cpan-39bf76dae61 )