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:[email protected]

LICENSE
   BSD License