Perl如何在并行处理中共享全局变量?

joe*_*joe 3 parallel-processing perl fork

  use Parallel::ForkManager;
  use LWP::Simple;
  my $pm=new Parallel::ForkManager(10);
  our $a =0;
 @LINK=( 10,203, 20, 20 ,20 ,10 ,101 ,01 ,10 ) ;
  for my $link (@LINK) {
    $pm->start and next;
    my $lo = ($link * 120.22 )*12121.2121212121212121*( 12121212.1212121+ $link);
    $a = $a+ $lo ;   
    print $a."\n" ; 
    $pm->finish;
  };

  print $a ; 
Run Code Online (Sandbox Code Playgroud)

我试图使用并行fork Manager模块访问并行进程上的全局变量.程序结束时全局变量仍然保持不变..如何实现这一目标?是否有可能?

mpe*_*ers 9

这不是范围问题,而是一个不同的过程问题.Parallel :: ForkManager使用fork()(因此得名).这意味着并行运行的每个版本实际上是一个单独的进程(perl解释器的单独调用),因此是单独的内存.变量在每个进程中都具有相同的名称,但它们不会指向内存中的相同位置.

如果你想在并行工作者之间共享变量,那么你需要查看使用线程(我不推荐)或使用某种IPC(进程间通信),如IPC :: Shareable