控制Fork超级队列的长度

时间:2013-12-06 03:07:14

标签: multithreading perl fork

继续我的上一个问题Access element across multiple hash of hash of arrays

我有这段代码,

use Forks::Super;
foreach my $special_type (keys %test_variables) {
        my $last_job = undef;
        foreach my $test_module (keys %{$test_variables{$special_type}}) {
                foreach my $set_of_tests ($test_variables{$special_type}{$test_module}) {
                        foreach my $test (@$set_of_tests){
                                print "Starting $test\n";
                                my $job = fork {
                                    name => "$special_type/$test_module/$test",
                                    cmd => "nosetests -m $special_type/$test_module/$test",
                                    depend_on => $last_job
                                };
                                $last_job = "$special_type/$test_module/$test";
                                print "Queue last job:$last_job \n\n\n\n";
                        }
                }
        }
}

但是形成的队列长度似乎固定为1。 所以基本上只有第二个进程等待第一个进程完成。

虽然我曾想象/希望像5这样构建的完整队列等待4,4等待3,等待2和2等待1。

问题:如何在开始时构建整个队列?

1 个答案:

答案 0 :(得分:1)

$Forks::Super::ON_BUSY设为queue或使用

等模块
use Forks::Super ON_BUSY => 'queue';

默认设置为block,这将在您第一次设置具有依赖关系的作业时停止执行。

也许queue应该是默认值,或者至少应该是具有依赖关系的作业的默认值。