2012-08-03 46 views
0

我在serverA上有一個perl程序,程序需要處理大約500個DOM ip的數據。 DOM文件在serverB上。對於每個DOM,我需要將6個文件下載到某些公式,並將它們插入到MySQL DB中。對於每個DOM大約需要2分鐘才能下載文件。我需要在儘可能最短的時間內完成這項工作,因爲我必須每兩個小時進行一次這個過程。使用Perl進行多文件下載和處理

現在我使用多線程:

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

有時做沒有把所有的文件。

我做得很好還是有另一種方法可以做到最好?

非常感謝您的幫助!

+0

這應該不會編譯。什麼是DOM文件?什麼是postD,preD等?請發佈真實的代碼。 – 2012-08-03 14:32:25

+0

嗨,這是變量,我不能把所有的代碼,它是約1600線。 – Karem 2012-08-03 14:59:17

+0

對不起,DOM文件是EVDO設備,我忘記了解釋 – Karem 2012-08-03 15:00:27

回答

0

您可以考慮Parallel::ForkManager

至於不下載的所有文件的替換你的主題:

  • 有沒有數的一致性不是下載?
  • 是否有任何錯誤訊息?