perl Forks::Super不等待进程
我使用perl的模块来控制一次分叉的进程数量。这是我的密码:perl Forks::Super不等待进程,perl,fork,limit,Perl,Fork,Limit,我使用perl的模块来控制一次分叉的进程数量。这是我的密码: 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个项目开始(每个
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行。有人知道问题出在哪里吗?我正在锁定文件,所以这不应该是问题所在。谢谢 我对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。使用一个已知的共享文件,你会很好。我对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。使用一个已知的共享文件,你会很好。一些调试选项:在
$ENV{FORKS\u SUPER\u DEBUG}
设置为真值的情况下运行,或者在任务开始、结束或放入队列时使用回调提供反馈。你告诉我们!是因为写操作被覆盖了吗?是否接触到打印
?是否接触到打印
?等等。确实可以找到指纹。每当我使用常规perlfork
运行此代码时,它总是会到达每个进程的打印和写入位置。如果发现错误,请将其报告给bug forks-super@rt.cpan.org
有足够的信息可以复制,我会查看它(我是本模块的作者)。一些调试选项:使用$ENV运行{FORKS_SUPER_DEBUG}
设置为真值,或者在任务开始、结束或被放入队列时使用回调来提供反馈。您告诉我们!这是因为写入被覆盖了吗?打印
达到了吗?打印
达到了吗?等等。打印确实达到了。每当我使用常规perlfork运行此代码时,它都会达到每次处理都要进行打印和写入。如果发现错误,请将其报告给bug forks-super@rt.cpan.org
有足够的信息可以复制,我会查看(我是本模块的作者)。