[Perl] 绕过内存不足的问题的一种方案
2011-07-04 11:02
204 查看
Perl的自动内存回收机制似乎不是很完善,有时程序会出现内存一直上涨最终内存不足的问题,到处undef也没能解决问题。一个绕过该问题的方法是,把整个任务拆分成子任务,每个任务跑一个进程。跑完一个进程再跑下一个进程,虽然没有从本质上解决问题,但可以使任务完成。下面是一个拆分文本处理过程的例子:
open(INPUT, $input_file) or die; my @buf = <INPUT>; close(INPUT); open(OUTPUT, ">$output_file") or die; my $sub_line_num = 100; # 每个进程处理的行数 my $all_line_num = @buf; # 总行数 my $fork_num = int($all_line_num/$sub_line_num); # 进程个数 for (my $i=0; $i<$fork_num; $i++) { my @sub_buf; if ($i<$fork_num-1) { @sub_buf = @buf[$i*$sub_line_num .. ($i+1)*$sub_line_num-1]; } else { @sub_buf = @buf[$i*$sub_line_num .. $all_line_num-1]; } my $pid = fork(); if ($pid != 0) { print "New process started, pid = $pid\n"; waitpid($pid, 0); # 等待子进程退出 print "Process $pid exited normally\n"; } # 此次开始子进程的操作 else { foreach (@sub_buf) { process_your_line($_); # 处理该行 } exit; } } close(OUTPUT);
相关文章推荐
- java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案
- java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案
- java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案
- java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案
- java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案
- MyEclipse 内存不足问题解决方案
- 内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档 问题的一种解决办法
- MFC程序内存不足问题
- Tomcat6内存不足问题及解决方法
- Excel2013 打开文档 显示 内存或磁盘空间不足 无法再次打开或保存 的问题
- win 8 Excel打开其他计算机文档时,提示内存不足等问题
- Matlab使用过程中内存不足问题的总结
- [转]MyEclipse内存不足问题
- Linux的cached和pagecache清除 解决缓存、内存不足、测试结果影响问题
- <zz>Matlab内存不足问题的解决【转】
- Cache占用过多内存导致Linux系统内存不足问题排查
- 大并发连接的oracle在Linux下内存不足的问题的分析
- 内存不足引起的SIGKILL:一个缓冲区不断增长问题的定位与解决