【问题标题】:warning using Parallel::ForkManager but only in Windows警告使用 Parallel::ForkManager 但仅在 Windows 中
【发布时间】:2016-06-09 04:07:56
【问题描述】:

我在使用Parallel::ForkManager 时有时会收到此警告,但仅限于 Windows,而不是基于 Unix 的系统。这是什么意思,我应该担心吗?

子进程“-17108”消失了。在外面打电话给waitpid Parallel::ForkManager 可能已经收获了。

这是我的代码所基于的docs 中的示例代码:

use LWP::Simple;
use Parallel::ForkManager;

my @links=(
    ["http://www.foo.bar/rulez.data","rulez_data.txt"],
    ["http://new.host/more_data.doc","more_data.doc"],
);

# Max 30 processes for parallel download
my $pm = Parallel::ForkManager->new(30);

LINKS:
foreach my $linkarray (@links) {
    $pm->start and next LINKS; # do the fork

    my ($link, $fn) = @$linkarray;
    warn "Cannot get $fn from $link"
      if getstore($link, $fn) != RC_OK;

    $pm->finish; # do the exit in the child process
}

$pm->wait_all_children;

【问题讨论】:

  • 这意味着进程结束并且其他一些进程在 Parallel::ForkManager 之前调用 waitpid 来获取它。鉴于它只是偶尔发生,而且在 Windows 上可能表明某处存在错误,我认为。
  • @jira 没有其他进程可以收获它。 “收割”到底是什么意思?
  • 我认为最好将其报告为 Parallel::ForkManager 中可能存在的错误。

标签: windows perl fork


【解决方案1】:

我遇到了类似的问题,在 "$pm->start and next LINKS;" 之前放置了一个 sleep 1 解决了这个问题。我猜这是由于继续分叉,Perl 失去了对分叉进程的跟踪。我可能错了!

【讨论】: