NAME
Coro::ProcessPool - an asynchronous process pool
SYNOPSIS
use Coro::ProcessPool;
my $pool = Coro::ProcessPool->new(
max_procs => 4,
max_reqs => 100,
);
my %result;
foreach my $i (1 .. 1000) {
$result{$i} = $pool->process(sub { shift * 2 }, $i);
}
$pool->shutdown;
DESCRIPTION
Processes tasks using a pool of external Perl processes.
METHODS
new
Creates a new process pool. Processes will be spawned as needed.
max_procs
This is the maximum number of child processes to maintain. If all
processes are busy handling tasks, further calls to "process" in .
will yield until a process becomes available.
max_reqs
If this is a positive number (defaults to 0), child processes will
be terminated and replaced after handling "max_reqs" tasks. Choosing
the correct value for "max_reqs" is a tradeoff between the need to
clear memory leaks in the child process and the time it takes to
spawn a new process and import any packages used by client code.
process($f, $args)
Processes code ref $f in a child process from the pool. If $args is
provided, it is an array ref of arguments that will be passed to $f.
Returns the result of calling "$f-"(@$args)>.
This call will yield until the results become available. If all
processes are busy, this method will block until one becomes available.
Processes are spawned as needed, up to "max_procs", from this method.
Also note that the use of "max_reqs" can cause this method to yield
while a new process is spawned.
shutdown
Shuts down all processes and resets state on the process pool. After
calling this method, the pool is effectively in a new state and may be
used normally.
AUTHOR
Jeff Ober mailto:jeffober@gmail.com
LICENSE
BSD License