三十个子进程来并行下载不同的链接的代码,用到了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 对象。