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.