in reply to Re: IPC::Msg Fork queue
in thread IPC::Msg Fork queue
Hi trippledubs,
MCE can process a sequence of numbers efficiently. E.g. 1 to MAX_ITEMS. The bounds_only option tells MCE to pass the next starting and ending elements only. Hence boundaries only. IPC occurs once per each chunk_size.
#!/usr/bin/env perl use strict; use warnings; use MCE; use constant MAX_ITEMS => 200000; my $n_workers = shift // do { die "usage: $0 n_workers\n"; }; sub isPrime { my $num = shift; return 1 if ($num < 4); return 0 if ($num %2 == 0); for (my $i=3; $i <= sqrt($num); $i+=2) { return 0 if $num % $i == 0; } return 1; } sub task { my ( $mce, $seq, $chunk_id ) = @_; for my $data ( $seq->[0] .. $seq->[1] ) { print "Prime: $data\n" if isPrime($data); } } MCE->new( max_workers => $n_workers, sequence => [ 1, MAX_ITEMS ], bounds_only => 1, chunk_size => 200, user_func => \&task, )->run();
Regards, Mario
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: IPC::Msg Fork queue
by marioroy (Prior) on Feb 24, 2019 at 05:28 UTC | |
|
Re^3: IPC::Msg Fork queue
by trippledubs (Deacon) on Feb 26, 2019 at 15:32 UTC |