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.0';
3 21     21   1478143 use strict;
  21         236  
  21         656  
4 21     21   121 use warnings;
  21         47  
  21         521  
5 21     21   575 use 5.014;
  21         78  
6              
7 21     21   10818 use Parallel::ForkManager::Segmented::Base v0.4.0 ();
  21         541783  
  21         693  
8 21     21   222 use parent 'Parallel::ForkManager::Segmented::Base';
  21         37  
  21         138  
9              
10 21     21   16925 use Parallel::ForkManager ();
  21         1720936  
  21         5054  
11              
12             sub run
13             {
14 21     21 1 23766 my ( $self, $args ) = @_;
15              
16 21         243 my $processed = $self->process_args($args);
17 21 100       918 return if not $processed;
18             my ( $WITH_PM, $batch_cb, $batch_size, $nproc, $stream_cb, ) =
19 20         70 @{$processed}{qw/ WITH_PM batch_cb batch_size nproc stream_cb /};
  20         105  
20              
21 20 50       75 return $self->serial_run($processed) if not $WITH_PM;
22              
23 20         55 my $pm;
24              
25 20         165 $pm = Parallel::ForkManager->new($nproc);
26 20         83475 my $batch = $stream_cb->( { size => 1 } )->{items};
27 20 50       380 return if not defined $batch;
28 20         140 $batch_cb->($batch);
29             ITEMS:
30 20         30340 while (
31             defined( $batch = $stream_cb->( { size => $batch_size } )->{items} ) )
32             {
33 56         3259 my $pid = $pm->start;
34              
35 56 100       8125755 if ($pid)
36             {
37 40         2002 next ITEMS;
38             }
39 16         1681 $batch_cb->($batch);
40 16         68052 $pm->finish; # Terminates the child process
41             }
42 4         1088 $pm->wait_all_children;
43 4         4006689 return;
44             }
45              
46             1;
47              
48             __END__