为什么我的代码使用Parallel :: ForkManager会产生僵尸?

Cwisch

我正在编写的一段代码使用Parallel :: ForkManager,并且我注意到它在脚本运行时正在创建许多僵尸。我想知道我是否缺少一些东西wait_all_children

my $fork_manager = new Parallel::ForkManager->($ENV{CPUS})

for(my $i = 0; $i < scalar @plates; $i++){
    my $offset = get_full_plate_offsets(@{$plates[$i]});
    make_path(File::Spec->catfile($tmp_dir, $i));
    foreach my $cell (keys %{$offset}){
        my($x, $y) = @{$offset->{$cell}};
        $fork_manager->start("$cell @ $x, $y") and next;
        my $out_file = File::Spec->catfile($tmp_dir, $i, "$cell.jpg");
        my $out_text = File::Spec->catfile($tmp_dir, $i, "$cell.txt");
        split_file($input_jpg, [$x, $y], $out_file);
        my $result = do_something($out_file);
        open(my $FH, '>', $out_text);
        print $FH "$result\n";
        $fork_manager->finish;
    }
    $fork_manager->wait_all_children;
}

也是一个澄清的问题。僵尸总是坏的吧?

起初,我给人的印象是,僵尸进程只是尚未被其父级恢复的进程。现在我想知道我的代码是否根本不等待孩子。

池上

P :: FM仅在start被调用且正在运行的最大子代数以及何时wait_children或被wait_all_children调用才会收获在那之前退出的孩子会变成僵尸。

您所拥有的孩子(包括僵尸)将永远不会超过指定的数目,因此临时出现僵尸并不是一件坏事[1]唯一的问题是run_on_finish处理程序仅在获得子进程时才会执行,因此这表明不会尽快调用处理程序。

我相信您可以使用以下方式早日收获孩子:

$SIG{CHLD} = sub { $pm->wait_children };

  1. 请参阅持久性僵尸进程是否有错误迹象?以获得一般答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的代码使用Parallel :: ForkManager会产生僵尸?

来自分类Dev

为什么在我的代码中使用宏会产生错误?

来自分类Dev

为什么使用Parallel :: Loops的程序会耗尽我的内存?

来自分类Dev

为什么我的代码会产生此输出(Python)?

来自分类Dev

需要解释为什么我的代码会产生 ValueError

来自分类Dev

如何使用CGContext / CGContextRef绘制虚线?为什么我的代码会产生实线?

来自分类Dev

使用Lodash合并数组,为什么会产生重复的数组值?我的代码在哪里出错?

来自分类Dev

为什么此代码会产生InvalidMemoryOperationError?

来自分类Dev

为什么此代码会产生错误?

来自分类Dev

为什么此代码会产生错误?

来自分类Dev

为什么此代码会产生IndexOutOfBoundsException?

来自分类Dev

为什么此代码会产生IndexOutOfBoundsException?

来自分类Dev

为什么我的代码会产生TypeError:“ NoneType”对象不可迭代

来自分类Dev

为什么我的最新代码会覆盖其余的代码

来自分类Dev

为什么标签排列会产生不同的霍夫曼代码?

来自分类Dev

为什么此Haskell代码会产生堆栈溢出?

来自分类Dev

为什么以下代码会产生分段错误?

来自分类Dev

为什么这个基本的Java代码会产生不同的输出?

来自分类Dev

为什么下面的代码会产生分段错误

来自分类Dev

为什么这个 C 代码会产生无限循环?

来自分类Dev

我不明白为什么在我的代码中使用“”会起作用,但是与“”相同的代码却不起作用

来自分类Dev

为什么在Rspec中使用any_instance_of会产生代码气味?

来自分类Dev

为什么我的html代码会忽略我的js?

来自分类Dev

为什么我的shellcode测试程序会产生段错误?

来自分类Dev

为什么我的函数会产生“冲突类型”错误?

来自分类Dev

为什么我的总时间公式会产生错误的结果?

来自分类Dev

为什么我的Cypher查询会产生不同的结果?

来自分类Dev

为什么我的绘图代码不断产生模糊的形状?

来自分类Dev

为什么我在 Jupyter 上的代码不产生输出

Related 相关文章

  1. 1

    为什么我的代码使用Parallel :: ForkManager会产生僵尸?

  2. 2

    为什么在我的代码中使用宏会产生错误?

  3. 3

    为什么使用Parallel :: Loops的程序会耗尽我的内存?

  4. 4

    为什么我的代码会产生此输出(Python)?

  5. 5

    需要解释为什么我的代码会产生 ValueError

  6. 6

    如何使用CGContext / CGContextRef绘制虚线?为什么我的代码会产生实线?

  7. 7

    使用Lodash合并数组,为什么会产生重复的数组值?我的代码在哪里出错?

  8. 8

    为什么此代码会产生InvalidMemoryOperationError?

  9. 9

    为什么此代码会产生错误?

  10. 10

    为什么此代码会产生错误?

  11. 11

    为什么此代码会产生IndexOutOfBoundsException?

  12. 12

    为什么此代码会产生IndexOutOfBoundsException?

  13. 13

    为什么我的代码会产生TypeError:“ NoneType”对象不可迭代

  14. 14

    为什么我的最新代码会覆盖其余的代码

  15. 15

    为什么标签排列会产生不同的霍夫曼代码?

  16. 16

    为什么此Haskell代码会产生堆栈溢出?

  17. 17

    为什么以下代码会产生分段错误?

  18. 18

    为什么这个基本的Java代码会产生不同的输出?

  19. 19

    为什么下面的代码会产生分段错误

  20. 20

    为什么这个 C 代码会产生无限循环?

  21. 21

    我不明白为什么在我的代码中使用“”会起作用,但是与“”相同的代码却不起作用

  22. 22

    为什么在Rspec中使用any_instance_of会产生代码气味?

  23. 23

    为什么我的html代码会忽略我的js?

  24. 24

    为什么我的shellcode测试程序会产生段错误?

  25. 25

    为什么我的函数会产生“冲突类型”错误?

  26. 26

    为什么我的总时间公式会产生错误的结果?

  27. 27

    为什么我的Cypher查询会产生不同的结果?

  28. 28

    为什么我的绘图代码不断产生模糊的形状?

  29. 29

    为什么我在 Jupyter 上的代码不产生输出

热门标签

归档