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