我在 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;
}
有时不带所有文件。
我做得很好还是有另一种方法可以做得最好?
非常感谢你的帮助!