NAME
Parallel::Queue::Manager - dispatching object for Parallel::Queue.
SYNOPSIS
# Note: examples of the options for passing in a
# queue via new, runqueue, and assignment
# are shown in t/1?-runqueue*.t.
# arguments are the same as Parallel::Queue,
# other than 'export' is unnecessary as it
# is a method.
# whatever you use for squishification.
# the input queue is a list of arguments
# to the $handler.
#
# in this case the queue is a list of >8KB
# files that need to be squashed.
my
@pathz
=
grep
{
-s > 8192
}
glob
$glob
;
# the handler takes a queue entry as argument
# and returns a subref. in this case, it gets
# file path and bundles it into a subref calling
# squish.
my
$handler
=
sub
{
my
$path
=
shift
;
sub
{ squish
$path
}
};
# the queue can be passed as an argument to new
# for one-stop shopping.
Parallel::Queue::Manager
->new(
$handler
,
@pathz
)
->configure(
qw( verbose finish )
)
->runqueue(
$job_count
,
@pathz
);
# to simplify re-using the $qmgr object,
# jobs can be passed to runqueue also.
#
# in this case the job count can depend
# on whether the queued jobs are expensive
# to process or not (e.g., gzip vs. xz -T0).
my
$qmgr
= Parallel::Queue::Manager
->new(
$handler
)
->configure(
qw( finish )
;
my
@queue
=
map
{
my
$task
=
$_
;
my
$job
= is_big_task(
$_
)
? 1
: 32
;
[
$job
,
$task
]
}
generate_jobs;
$qmgr
->runqueue(
@$_
)
for
@queue
;
# the "queue" and "handler" methods provide
# access to the queue elements as lvalues.
my
$qmgr
= Parallel::Queue::Manager->new();
for
(
@tasks
)
{
my
(
$handler
,
$queue
) =
@$_
;
$qmgr
->handler =
$handler
;
$qmgr
->runqueue(
$jobs
=>
@$queue
);
my
$sanity
=
$qmgr
->queue;
say
join
"\n\t"
=>
'Unfinished business:'
,
@$sanity
if
@$sanity
;
}