首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perl Forks::Super不等待进程

perl Forks::Super不等待进程
EN

Stack Overflow用户
提问于 2012-11-17 16:17:42
回答 1查看 545关注 0票数 1

我使用perl的Forks::Super模块来控制我一次派生的进程的数量。下面是我的代码:

代码语言:javascript
复制
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行写入到文件中。有人知道问题出在哪里吗?我正在锁定文件,所以这不应该是问题所在。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-11-19 16:31:13

我对Forks::Super不太了解,但从文档中我认为应该这样写:

代码语言:javascript
复制
$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,你就会做得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13428889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档