我使用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个项目开始(每个项目都写入一个文件),在循环之后的所有等待之后,我可能只有60行写入到文件中。有人知道问题出在哪里吗?我正在锁定文件,所以这不应该是问题所在。谢谢!
发布于 2012-11-19 16:31:13
我对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,你就会做得很好。
https://stackoverflow.com/questions/13428889
复制相似问题