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 formax_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