세 개의 파일 (두 개의 탭으로 구분 된 필드가 있으며 파일 사이에 중복이 없습니다)이 있습니다. 나는 그들을 병렬로 읽고 그들의 내용을 하나의 해시로 저장하고 싶다. Perl : Parallel :: ForkManager로 많은 파일 내용을 저장하십시오.
이
내가 뭘하려 : 이use warnings;
use strict;
use Parallel::ForkManager;
use Data::Dumper;
my @files = ('aa', 'ab', 'ac');
my %content;
my $max_processors = 3;
my $pm = Parallel::ForkManager->new($max_processors);
foreach my $file (@files) {
$pm->start and next;
open FH, $file or die $!;
while(<FH>){
chomp;
my($field1, $field2) = split/\t/,$_;
$content{$field1} = $field2;
}
close FH;
$pm->finish;
}
$pm->wait_all_children;
print Dumper \%content;
이 스크립트의 출력은
$ VAR1 = {}이다;
3 개의 파일이 병렬로 처리되는 것을 볼 수는 있지만 어떻게 포크 후 처리를 위해 3 개의 내용을 저장할 수 있습니까?
왜 이러한 파일을 병렬로 읽으려고하십니까? 솔루션을 작성했는데 속도가 너무 느리다면 프로파일 링 한 결과 파일을 읽는 것이 병목 현상이라는 것을 알았습니까? 파일이 크고 별도의 드라이브에 있지 않으면 속도가 향상되지 않을 수 있으며 코드를 이해하기가 훨씬 어려워집니다. – Borodin