使用Perl进行多文件下载和处理

时间:2012-08-03 14:06:34

标签: multithreading perl ftp

我在serverA上有一个perl程序,该程序需要处理大约500个DOM ip的数据。 DOM文件位于serverB上。对于每个DOM,我需要将6个文件下载到某些公式并将它们插入到MySQL DB中。对于每个DOM,大约花2分钟下载文件。我需要在尽可能最短的时间内完成这项工作,因为我每两个小时就要完成一次这样的过程。

现在我正在使用多线程:

    my @threads;
for my $key (keys %dom)   ### Have all DOM ip
{
    print "El key es $key\n";
    my %data = %{$dom{$key}};
    my $t = threads->new(\&sub1, $postD, $preD, $key, $counter, %data);
    push(@threads,$t);

    if($counter == 40)
    {
        foreach (@threads) {
            my $num = $_->join;
            print "done with $num\n";
        }
        $counter = 1;
        @threads=();

    }
    $counter++;

}
foreach (@threads) {
    my $num = $_->join;
    print "done with $num\n";


 sub sub1
 {
my ($postD, $preD, $key, $num, %data) = @_;
my $status = GetRelevantFiles(substr($postD,0,8),substr($preD,0,8),%data) if (!defined($opt_f));

if(ref($status) eq 'ERROR')
{
    warnNotify($status->{'message'});
}
return $num;
 }

有时不带所有文件。

我做得好还是有另一种方法可以做到最好?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您可以考虑用Parallel::ForkManager

替换您的主题

至于不下载所有文件:

  • 未下载的号码是否一致?
  • 有错误消息吗?