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

Perl如何在并行处理中共享全局变量?,perl,fork,parallel-processing,Perl,Fork,Parallel Processing,我试图使用并行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 $lin

我试图使用并行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 ; 
线路

但是,由于您正在启动并行进程,因此每个
$a
都将位于其内存空间中。这意味着每个
$a
都是第一个
$a
的副本。最后的第一个
$a
将永远不会改变,因为这一点


从一个进程到另一个进程获取值需要一些进程间通信。这可以通过套接字、IPC或其他机制来实现。

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


如果您想在并行工作程序之间共享变量,那么您需要考虑使用线程(我不推荐)或使用某种IPC(进程间通信),如我使用的技巧-将fork进程内的每个变量保存到单独的txt文件中,而不是最后(fork之后)把所有的文件都翻遍收集起来就行了(如果不需要,您可以删除文件。

@joe,您的编辑不会更改任何内容。$a的范围仍然相同。无论我的或我们的,IPC问题仍然存在。您的分叉进程正在执行其工作,而没有将结果保存到完成后可以保存的任何位置。您的更改无关紧要,因为您正在分叉,所有变量都是可用的在不同的过程中。如何实现这一点。你能帮我吗?为什么你想共享变量?在你开始这个过程后它们会改变吗?
my $a = 0;