serverA に perl プログラムがあります。このプログラムは、約 500 の DOM IP のデータを処理する必要があります。DOM ファイルは serverB にあります。各DOMについて、6つのファイルをいくつかの式にダウンロードし、それらをMySQL DBに挿入する必要があります。DOM ごとに、ファイルのダウンロードに約 2 分かかります。ほぼ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;
}
場合によっては、すべてのファイルを持参しないでください。
私はうまくやっていますか、それとも最善を尽くす別の方法がありますか??
助けてくれてどうもありがとう!