Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl Forks::Super不等待进程_Perl_Fork_Limit - Fatal编程技术网

perl Forks::Super不等待进程

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个项目开始(每个

我使用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个项目开始(每个项目都写入一个文件),在循环后的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}
设置为真值的情况下运行,或者在任务开始、结束或放入队列时使用回调提供反馈。你告诉我们!是因为写操作被覆盖了吗?是否接触到
打印
?是否接触到
打印
?等等。确实可以找到指纹。每当我使用常规perl
fork
运行此代码时,它总是会到达每个进程的打印和写入位置。如果发现错误,请将其报告给
bug forks-super@rt.cpan.org
有足够的信息可以复制,我会查看它(我是本模块的作者)。一些调试选项:使用
$ENV运行{FORKS_SUPER_DEBUG}
设置为真值,或者在任务开始、结束或被放入队列时使用回调来提供反馈。您告诉我们!这是因为写入被覆盖了吗?
打印
达到了吗?
打印
达到了吗?等等。打印确实达到了。每当我使用常规perl
fork运行此代码时,它都会达到每次处理都要进行打印和写入。如果发现错误,请将其报告给
bug forks-super@rt.cpan.org
有足够的信息可以复制,我会查看(我是本模块的作者)。