多进程处理文件,请教各位

多进程处理文件,请教各位

目录/usr/perl/log 下有N多个日志文件 *.log


把每个日志文件名取出来,然后打开日志文件取每一行,
经过正则处理后写入另一个目录的新文件中/usr/perl/newLog *.nlog

当log目录中文件非常多的时候,处理速度很慢。请教怎么用多进程实现呢?如何能提高速度呢?

谢谢赐教。
你是想同一时间处理多个文件吗?  

如果你现在单进程处理时 cpu占用率都是很大的话    多进程或者 多线程的意义都不大



QUOTE:
原帖由 hitsubunnu 于 2008-12-5 13:35 发表
你是想同一时间处理多个文件吗?  

如果你现在单进程处理时 cpu占用率都是很大的话    多进程或者 多线程的意义都不大

看楼主的描述的情形,瓶颈估计在 I/O 那块,使用多进程保不齐会有用。


QUOTE:
原帖由 qianzhuo 于 2008-12-5 12:58 发表
请教怎么用多进程实现呢?

perldoc -f fork
perldoc -f wait
其实处理很简单,只是文件很多。代码这样:(新手,请指点)

my $d_path = "/home/perl/log";
my @dst = glob("$d_path/*.log");
foreach $file_d (@dst)
  {
  (undef,$txt_name) = split /\/log\//,$file_d;
  open(FP, "$file_d") or die"gz file open error!!!!!!!!!";
  open (FILE,">\.\/newlog\/$txt_name") or die "TXT file open error!!!!!!!!!!!";
   while (<FP>)
      {
        正则处理($_);
        print FILE $_,"\n";
      }
  }
你可以先把文件列表 @dst  写到一个文件里

然后 也是 每次读出一行 即一个文件名

你的数组 @dst  可能是太占用资源 了
写到文件里之后CPU占用率低了,但速度并没有明显提高。
还请指教。谢谢


QUOTE:
perldoc -f fork
perldoc -f wait

再用多进程同时处理多个文件
新手,才学了几天。
多进程,具体怎么做不会。呵呵,请指教。谢谢
if ($child_pid = fork())
{
my $d_path = "/home/perl/log";
my @dst = glob("$d_path/*.log");
foreach $file_d (@dst)
  {
  (undef,$txt_name) = split /\/log\//,$file_d;
  open(FP, "$file_d") or die"gz file open error!!!!!!!!!";
  open (FILE,">\.\/newlog\/$txt_name") or die "TXT file open error!!!!!!!!!!!";
}else{
   while (<FP>)
      {
        正则处理($_);
        print FILE $_,"\n";
      }
  }
}

这样写是不是就是父进程循读,子进程循环写啊?