0

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

場合によっては、すべてのファイルを持参しないでください。

私はうまくやっていますか、それとも最善を尽くす別の方法がありますか??

助けてくれてどうもありがとう!

4

1 に答える 1

0

スレッドをParallel::ForkManagerに置き換えることを検討してください。

すべてのファイルをダウンロードしない場合:

  • ダウンロードされていない数に一貫性はありますか?
  • エラーメッセージはありますか?
于 2012-08-03T18:26:01.047 に答える