in reply to running a function for different list parallely using fork
#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11150996 use warnings; my @testLists = 1 .. 7; # FAKE for testing my $opts = 'opts'; # FAKE for testing my %pids; # NOTE changed to hash because children finish in any order foreach my $list (@testLists) { while( keys %pids >= 2 ) { delete $pids{ +wait }; } if( my $pid = fork ) { $pids{ $pid }++; } elsif( defined $pid ) { my $status += regressions($opts, $list); exit; } else { die "fork failed $!"; } } foreach my $pid ( keys %pids ) { waitpid($pid, 0); } sub regressions # FIXME for testing { print time, " pid $$ starting on (@_)\n"; sleep 1 + int rand 3; print time, " pid $$ ending on (@_)\n"; }
Sample Output:
1678877305 pid 65651 starting on (opts 1) 1678877305 pid 65652 starting on (opts 2) 1678877307 pid 65651 ending on (opts 1) 1678877307 pid 65653 starting on (opts 3) 1678877308 pid 65652 ending on (opts 2) 1678877308 pid 65653 ending on (opts 3) 1678877308 pid 65654 starting on (opts 4) 1678877308 pid 65655 starting on (opts 5) 1678877310 pid 65655 ending on (opts 5) 1678877310 pid 65656 starting on (opts 6) 1678877311 pid 65654 ending on (opts 4) 1678877311 pid 65657 starting on (opts 7) 1678877312 pid 65656 ending on (opts 6) 1678877313 pid 65657 ending on (opts 7)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: running a function for different list parallely using fork - MCE::Channel
by marioroy (Prior) on Mar 16, 2023 at 04:13 UTC | |
|
Re^2: running a function for different list parallely using fork
by tybalt89 (Monsignor) on Mar 17, 2023 at 01:25 UTC |