跨多个哈希数组的访问元素

时间:2013-12-06 00:05:45

标签: perl hash wait

所以我创建了一个数组散列哈希。这个数据结构(让我们称之为“amey”)是我希望控制执行的python测试的集合。

它看起来像这样:

'amey'=
    {
        'test_type1' = {
                  'class_test1' => [
                                        'test_1'
                                      ],
                  'class_test2' => [
                                        'test_1',
                                        'test_2'
                                      ],
                  'class_test3' => [
                                        'test_1'
                                  ]
                };
        'test_type2' = {
                  'class_test1' => [
                                     'test_1',
                                     'test_2'
                                   ]
                };
        'test_type3' = {
                   'class_test1' => [
                                          'test_1',
                                          'test_2',
                                          'test_3',
                                          'test_4',
                                          'test_5',
                                          'test_6',
                                          'test_7'
                                        ],
            }
    }

目的是以某种方式遍历此哈希并与另一个测试类型的测试并行运行类型的每个测试。 *还知道测试所属的类很重要,因为有类似的命名测试。 (示例“test_bat”)*

例如:

开始并行执行以下测试

run test test_type1/class_test1/test_1 &;
run test test_type2/class_test1/test_1 &;
run test test_type3/class_test1/test_1 &;

等待以测试类型以完成运行,然后启动该类型的下一个类型。

例如,如果test_type1/class_test1/test_1完成,那么开始 test_type1/class_test2/test_1

每个类别的类数量不同,每个类别的测试数量也不相同。

我意识到这是一个复杂的要求(或者可能不适合perl僧侣:)),但我很乐意听到一些关于我应该怎么做的建议。

1 个答案:

答案 0 :(得分:2)

使用Forks::Super,在单独的fork调用中创建每个测试,并在它们之间设置依赖关系。

use Forks::Super;
$amey = { ... };

foreach my $class (keys %$amey) {
    foreach my $type (keys %{$amey->{$class}}) {
        my $last_job;
        foreach my $name (keys %{$amey->{$class}{$type}}) {

            my $job = fork {
                name => "$class/$type/$name",
                cmd => "run test $class/$type/$name",
                depend_on => $last_job
            };
            $last_job = "$class/$type/$name";
        }
    }
}