三十个子进程来并行下载不同的链接的代码

发布时间:2020-09-03编辑:脚本学堂
三十个子进程来并行下载不同的链接的代码,用到了LWP::Simple与Parallel::FrokManager模块,供大家学习参考。

三十个子进程来并行下载不同的链接的代码,用到了LWP::Simple与Parallel::FrokManager模块,供大家学习参考。

复制代码 代码如下:

#!/usr/bin/perl -w
use  LWP :: Simple;
use  Parallel :: ForkManager;

   @links = (
    [ " http://www.jb200.com/rulez.data " , " rulez_data.txt " ] , 
    [ " http://new.host/more_data.doc " , " more_data.doc " ] ,
   
  );

   #  同时使用 30 个进程
   my   $pm   =  new Parallel :: ForkManager( 30 );

   foreach   my   $linkarray  ( @links ) {
     $pm -> start and  next ;  #  开始 fork

     my  ( $link , $fn )  =  @ $linkarray ;
     warn   " Cannot get $fn from $link " 
       if  getstore( $link , $fn )  !=  RC_OK;

     $pm -> finish;  #  do the exit in the child process
  }
   $pm -> wait_all_children;

首先通过 new 来初始化一个 ForkManager 对象,同时必须标明最大进程数。如果使用 0 的话就可以避免 fork 来达到调试程序的作用。

然后使用 $pm->start 来开始 fork。 $pm 在子进程时返回 0 ,父进程时返回子进程的进程号(具体请参阅 Perl 的 fork 文档)。“and next” 用来跳过父进程。
注意:如果 fork 失败的话, $pm->start 就提示错误,程序结束。

$pm->finish 结束子程序(假设我们一开始使用了 start 来 fork)

注意:
在子进程中不能使用 $pm->start。
如果想在子进程中使用另外一组子进程,必须再初始化一个 Parallel::ForkManager 对象。