gpt4 book ai didi

arrays - 在foreach循环中使用Parallel::ForkManager

转载 作者:行者123 更新时间:2023-12-03 13:19:56 27 4
gpt4 key购买 nike

我只是在学习Perl作为第四语言。

我的愿望是使用 Parallel::ForkManager 来加速foreach循环,该循环使用其成员来自文本文件的数组。

基本上,我正在测试URL的.txt文件,并希望使其能够一次测试数组的多个成员,而不是一次测试一个数组(在这种情况下,一次测试五个),并且不会无意地发送相同的URL给它加药。

这样的事情会成功吗?

$limit = new Parallel::ForkManager(5);

foreach (@lines) {

$limit->start and next;
$lines = $_;

... do processing here ...

$limit->finish;
}

还是等效于运行一个小的多线程DoS脚本5次循环?

最佳答案

从文档中还不太清楚,但是

  • start的调用将在父进程中阻塞,直到运行的子级少于指定的限制。然后它将在父级中返回(非零)子级PID,在子级
  • 中返回零。
  • 子进程可以看到父进程中的所有数据,就像start被调用时一样。数据大概是写时复制的,因为 child 可以修改它,但是更改不会反射(reflect)在任何其他进程的工作空间
  • $pm->start and next习惯用法似乎有点晦涩。本质上,如果start方法返回一个真值,它将跳过循环的其余部分。我更喜欢下面代码中的my $pid = $fm->start; next if $pid;if构造。两者都做同样的事情,但我认为
  • 更清晰

    我建议您尝试使用这个更简单的应用程序,该应用程序使用五个子线程的缓存来打印从零到九的数字。
    use strict;
    use warnings;

    use Parallel::ForkManager;

    STDOUT->autoflush;

    my $fm = Parallel::ForkManager->new(5);

    for my $i (0 .. 9) {
    my $pid = $fm->start;
    if ($pid == 0) {
    print "$i\n";
    sleep 2;
    $fm->finish;
    }
    }

    关于arrays - 在foreach循环中使用Parallel::ForkManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24356031/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com