0

我在 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;
 }

有时不带所有文件。

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

非常感谢你的帮助!

4

1 回答 1

0

你可以考虑用Parallel::ForkManager替换你的线程

至于不下载所有文件:

  • 未下载的数量是否一致?
  • 是否有任何错误信息?
于 2012-08-03T18:26:01.047 回答