我有500个要读取的文件,但递归读取每个文件大约需要2分钟。所以我想用Perl并行执行这个操作。我怎样才能做到这一点?在Perl中以递归方式递归读取文件
0
A
回答
0
创建一个Perl脚本来处理一个罚款。创建一个shell脚本,batch-run.sh
,其中包含500行(行像perl perl-script.pl file001
)。然后创建另一个shell脚本,启动所需数量的后台进程以执行batch-run.sh
中的行。您可能想要限制后台进程的数量。像这样:
NCPUS=32 # number of parallel processes
ISCRIPT=batch-run.sh
NTASKS=$(wc -l $ISCRIPT | cut -d' ' -f1)
runbatch() {
OFFSET=$1
while [ $OFFSET -le $NTASKS ]; do
CMD=$(sed "${OFFSET}q;d" $ISCRIPT)
echo "$CMD ..."
eval $CMD
let OFFSET+=$NCPUS
done
}
for i in $(seq 1 $NCPUS); do
runbatch $i &
done
wait
2
你说的是大量的阅读,如果需要两分钟。你基本上是花时间等待硬盘。这些文件是否位于不同的硬盘上?如果没有,为什么你认为试图同时获得第二个文件会更快?事实上,它可能会通过增加硬盘驱动器的数量来降低速度。
但是,如果你想试试也无妨,
use threads;
use Thread::Queue qw();
use constant NUM_WORKERS => 4; # Twiddle this
sub run {
my ($qfn) = @_;
...read file $qfn here...
}
my $q = Thread::Queue->new();
my @threads;
for (1..NUM_WORKERS) {
push @threads, async {
while (my $job = $q->dequeue()) {
run($job);
}
};
}
$q->enqueue($_) for @qfns;
$q->enqueue(undef) for @threads;
$_->join() for @threads;
相关问题
- 1. perl递归文件读取
- 2. 以递归方式读取android中的递归json对象?
- 3. 以递归方式读取子目录中的Android.mk文件
- 4. Perl以递归方式复制特定格式的文件
- 5. 递归从.txt文件中读取Java
- 6. 以递归方式读取文件夹中的所有文件Java
- 7. Apache Camel - 需要递归读取文件
- 8. 使用loadtxt递归读取文件
- 9. 递归读取目录与文件夹
- 10. Perl中的递归打开文件
- 11. 以递归方式查找空文件夹并递归删除它们
- 12. Perl递归帮助
- 13. 解析xml文件的递归方式
- 14. Python递归数据读取
- 15. 播放Json递归读取
- 16. perl中的递归grep
- 17. perl中的“递归”常量
- 18. 查找递归在Perl
- 19. 以递归方式遍历perl XML中的XML节点:: LibXML
- 20. Java中的递归递归
- 21. 在Java中以递归方式递归的最低公共祖先
- 22. Java - SubSet和递归递归递归图
- 23. 以递归方式删除文件夹时排除文件
- 24. 解决递归的递归树方法
- 25. 递归文件夹
- 26. 在递归方法
- 27. 在递归方法
- 28. 以递归方式更改目录中的文件名称
- 29. 以递归方式列出目录中的文件 - python
- 30. 以递归方式更改目录中文件的权限
你可能会想在'fork'及其后果阅读起来。 – tadman 2013-05-10 04:47:43
我不认为你的意思*“递归”*。我无法想象递归文件读取可能是什么。也许你的意思是“顺序”*? – Borodin 2013-10-03 12:07:30