我正在使用perl的Forks::Super模块来控制我一次分叉的进程数量。这是我的代码:
for(....) {
my $pid = fork { max_proc => 10, on_busy=> "queue", sub => \&process_url, args=>[$url_h,$q_fh,$q_filename,$urls->{$url_h->{'url_id'}},\%fh] };
}
waitall;
然而,问题在于我说我的循环中有100个项目(每个项目写入文件),在循环之后的waitall之后,我可能只有60行写入文件。有谁知道是什么问题?我是文件锁定,所以这不应该是问题。谢谢!
答案 0 :(得分:1)
我对Forks :: Super不太了解,但从文档中我认为应该这样写:
$Forks::Super::ON_BUSY = 'queue';
$Forks::Super::MAX_PROC = 10;
for(....) {
my $pid = fork { sub => \&process_url, args=>[$url_h,$q_fh,$q_filename,$urls->{$url_h->{'url_id'}},\%fh] };
}
waitall;
我认为没有文件句柄写这个会更好。使用文件和锁在进程之间共享数据并不太有效。
要在linux中的进程之间共享数据,您可以使用:Cache :: FastMmap。使用已知的share_file,你会很好。