1

私は Perl の専門家ではないので、質問させていただきました。私は2つのプロセスコンテンポラリーを起動してそれらを待つ必要があり、私は次のようにしました:

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. 単にシェルを呼び出すことができるのに、シェルの呼び出しを避けるためにコマンドラインを解析しようとしているようです。

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

    次のように書くことができます

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