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