параллель :: forkmanager .... как передать 2 переменные на выходе - PullRequest
4 голосов
/ 10 июля 2011

Я использую Parallel :: ForkManager для передачи нескольких переменных от дочерних к родительскому. Я могу передать $ var ... как мне пройти больше? (еще раз спасибо Хоббсу за помощь в этом)

use Parallel::ForkManager;

my $pm=new Parallel::ForkManager(10); 
my(@cusips,@bad);
$pm->run_on_finish(sub{
my($pid,$exit_code,$ident,$exit_signal,$core_dump,$var,$v)=@_;
print "pid: ".$pid."\n";
print " first: ".${$var}."\n"; 
print " second: ".${$v}."\n";   
});


for(1..3){

$pm->start and next; # do the fork 
my $var=rand();
my $v=rand();

$pm->finish(0,\$var,\$v); # do the exit in the child process 
}


$pm->wait_all_children; 

1 Ответ

4 голосов
/ 10 июля 2011

Может быть только один:)

Передать ссылку на массив:

$pm->finish(0, [ $var, $v ]);

или ссылка на хеш:

$pm->finish(0, { 'var' => $var, 'v' => $v });

И

$pm->run_on_finish(sub{
    my ($pid,$exit_code,$ident,$exit_signal,$core_dump,$data)=@_;
    print "pid: ".$pid."\n";
    print " first: ".$data->[0]."\n"; 
    print " second: ".$data->[1]."\n";   
});

или

$pm->run_on_finish(sub{
    my ($pid,$exit_code,$ident,$exit_signal,$core_dump,$data)=@_;
    print "pid: ".$pid."\n";
    print " first: ".$data->{'var'}."\n"; 
    print " second: ".$data->{'v'}."\n";   
});
...