NAME
Parallel::QueueWorker - Simple worker support do jobs in parallel processes.
SYNOPSIS
use Parallel::QueueWorker;
my $worker = Parallel::QueueWorker->new(
# config file will load
configfile => "$FindBin::Bin/../etc/app.yml",
# callback/handler
# loop to prepare job queue
prepare_queue => sub {
my ($self) = @_;
$self->add_job({_id => $_ }) for (0..99);
$self->{done} = 1 unless $self->{done};
# if you return non-zero , the prepare_queue will loop next,
unless ($self->{done}) {
$self->{done} = 1;
return 100;
}
# this will flag no jobs queued anymore and break prepare_queue loop.
# but, not, this is invoke again!
return 0;
},
# before call work will run this.
before_work = sub {
my ($self);
# If you want to open resource,like socket,dbi, should in here.
},
# work code
work => sub {
my ($self,$job) = @_;
$self->say("job id:",$job->{_id});
},
);
DESCRIPTION
METHODS
run
$worker->run;
Start to process jobs , it will wait until all queued jobs done.
add_job($job)
# add job to queue
$worker->add_job({_id => 3,foo => 'bar'});
Add job to the internal job queue. You should call this on prepare_queue callback.
before_work(CodeRref)
Callback will invoke before call work.
work(CodeRref)
work prototype => sub { my ($self,$job ) }
Your work code, this code will fork and parallel running to process job.
prepare_queue(CodeRref)
The code to feed jobs into queue. If return non-zero, this code will invoke again after work, until it return 0, so you can make the code loop run or just once.
say
A helpful function to output message handy, additional master or worker PID.
$self->say('hello');
# in master, output,xxxx meant master PID
master xxxx >> hello
# in worker, output,xxxx meant worker(childen process) PID
worker xxxx >> hello
fork_work
Internal, fork workers and process queued jobs until jobs all done.
run
$worker->run;
Start to run, its will call prepare_queue code, if any job is queued, then fork workers to process them in parallel.
AUTHOR
Night Sailer(Pan Fan) < nightsailer{at}gmail dot com >
COPYRIGHT
copyright nightsailer.com
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.