1

我对 Perl 不是很熟悉,所以我更愿意问你。我必须启动两个当代进程并等待它们,我已经这样做了:

use Parallel::ForkManager;

for ($i=0; $i<2; $i++)
{
  $pm->start and next;
  @args = ("python", "myprogram");
  push(@args,split(/ +/, $param)); 
  system(@args) == 0 or die "system @args failed: $?";
  $pm->finish;
}

$pm->wait_all_children;

这是正确的还是有更好的方法来做到这一点?system并行使用是否正确?

4

1 回答 1

1

P::FM 的预期用途是限制孩子的数量,但在这里它确实很适合你。一些挑剔:

  1. 您的错误报告中有一个小错误。具体来说,它可能会给你无用的信息。改变

    die "system @args failed: $?";
    

    die "system @args failed: ".($? == -1 ? $! : $?)."\n";
    
  2. 不必要地使用过于复杂的 C 风格的 for 循环。我会改变

    for ($i=0; $i<2; $i++)
    

    for my $i (0..1)
    
  3. 看起来您正在尝试解析命令行以避免调用 shell,而您可以简单地调用 shell。

    @args = ("python", "myprogram");
    push(@args,split(/ +/, $param)); 
    system(@args)
    

    可以写成

    system("python myprogram $param")
    
于 2012-06-20T16:40:16.000 回答