File Coverage

blib/lib/Parallel/ForkManager/Segmented.pm
Criterion Covered Total %
statement 36 36 100.0
branch 6 8 75.0
condition n/a
subroutine 7 7 100.0
pod 1 1 100.0
total 50 52 96.1


line stmt bran cond sub pod time code
1             package Parallel::ForkManager::Segmented;
2             $Parallel::ForkManager::Segmented::VERSION = '0.10.1';
3 21     21   1488630 use strict;
  21         251  
  21         660  
4 21     21   110 use warnings;
  21         42  
  21         521  
5 21     21   598 use 5.014;
  21         80  
6              
7 21     21   11750 use Parallel::ForkManager::Segmented::Base v0.4.0 ();
  21         535254  
  21         675  
8 21     21   260 use parent 'Parallel::ForkManager::Segmented::Base';
  21         51  
  21         116  
9              
10 21     21   14807 use Parallel::ForkManager ();
  21         1734408  
  21         5390  
11              
12             sub run
13             {
14 21     21 1 22522 my ( $self, $args ) = @_;
15              
16 21         183 my $processed = $self->process_args($args);
17 21 100       810 return if not $processed;
18             my ( $WITH_PM, $batch_cb, $batch_size, $nproc, $stream_cb, ) =
19 20         60 @{$processed}{qw/ WITH_PM batch_cb batch_size nproc stream_cb /};
  20         95  
20              
21 20 50       80 return $self->serial_run($processed) if not $WITH_PM;
22              
23 20         45 my $pm;
24              
25 20         165 $pm = Parallel::ForkManager->new($nproc);
26 20         83150 my $batch = $stream_cb->( { size => 1 } )->{items};
27 20 50       365 return if not defined $batch;
28 20         140 $batch_cb->($batch);
29             ITEMS:
30 20         32160 while (
31             defined( $batch = $stream_cb->( { size => $batch_size } )->{items} ) )
32             {
33 56         2972 my $pid = $pm->start;
34              
35 56 100       8126063 if ($pid)
36             {
37 40         2180 next ITEMS;
38             }
39 16         1747 $batch_cb->($batch);
40 16         93915 $pm->finish; # Terminates the child process
41             }
42 4         1031 $pm->wait_all_children;
43 4         4006523 return;
44             }
45              
46             1;
47              
48             __END__