【发布时间】:2018-03-17 01:23:40
【问题描述】:
我有三个文件(两个制表符分隔的字段,文件之间没有冗余)。我想并行读取它们并将它们的内容存储在一个哈希中。
这是我尝试过的:
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 = {};
我可以看到这三个文件是并行处理的,但是...如何存储三个文件的内容以进行分叉后处理?
【问题讨论】:
-
为什么要并行读取这些文件?有没有写过解决方案,发现太慢了,然后分析了一下,发现读取文件是个瓶颈?除非您的文件很大并且位于单独的驱动器上,否则您不太可能获得有用的速度提升,并且您的代码实际上更难以阅读和理解。
标签: perl file-io parallel-processing fork