weidagang2046的专栏

物格而后知致
随笔 - 8, 文章 - 409, 评论 - 101, 引用 - 0
数据加载中……

30 个子进程来并行下载不同的链接

   use  LWP :: Simple;
  
use  Parallel :: ForkManager;

  


  
@links =
    [
" http://www.foo.bar/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 对象。

from: http://www.perlchina.org/archive/archive.php?action=archive&page=44

posted on 2006-05-21 20:37 weidagang2046 阅读(384) 评论(0)  编辑  收藏 所属分类: Perl


只有注册用户登录后才能发表评论。


网站导航: