2011-07-21 1 views
0

一部のページを取得するのにParallel::ForkManagerモジュールを使用します。以下は、関連するコードスニペットです:結果はOKであり、同じであっても、ファイルへの書き込みを複数のプロセスがある他のものを重複しない理由プロセスがファイルに書き込んでいるときに競合状態が表示されないのはなぜですか?

use Parallel::ForkManager; 

open FILE,">myfile" or die "cann't open file$!"; 
$pm = new Parallel::ForkManager(5); 

foreach $data (@all_data) { 

    my $pid = $pm->start and next; 
    #doing the fetching here and get the result on parsed_string 

    print FILE $parsed_string; 
    $pm->finish; # Terminates the child process 
} 

誰かがexpainてもらえますか?

+0

各行の先頭に4つのスペースを置くことによって、コードのようにあなたのコードをフォーマットしてください。 –

+0

このコードサンプルでは、​​ファイルハンドルを読み取り( '<')モードで開き、それから 'print'しています。それはあなたが言うことを意味していますか? – mob

+0

私は、親プロセス(私はもう私の質問を編集することはできません)の書き込みのためのファイルを開き、子プロセスのファイルに印刷することを意味します。 – Rubin

答えて

2

レースに何かを与えてください。 1行を印刷しても、リソースの競合は発生しません。このプログラムからの出力は、あなたが期待していることの多くを行いますか?

use Parallel::ForkManager; 

open FILE, '>', 'myfile' or die "cann't open file$!"; 
select FILE; $|++; 

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

foreach $data (0 .. 100) { 
    my $pid = $pm->start and next; 
    #doing the fetching here and get the result on parsed_string 

    print FILE "1. "; 
    sleep 1; 
    print FILE "Printing from "; 
    sleep int(rand 3); 
    print FILE "$$\n"; 
    sleep int(rand 5); 
    print FILE "2. Print"; 
    sleep int(rand 2); 
    print FILE "ing from $$\n"; 
    $pm->finish; 
} 

私が得た:

1. 1. 1. 1. 1. Printing from 7515 
Printing from Printing from 7517 
Printing from Printing from 7519 
2. Print7518 
2. Print7516 
ing from 7517 
1. ing from 7515 
2. Printing from 7519 
1. Printing from 1. Printing from 7520 
2. PrintPrinting from 7522 
2. Print2. Print7521 
ing from 7520 
1. ing from 7516 
ing from 7518 
1. 2. Print1. 2. Printing from 7522 
1. Printing from Printing from ing from 7521 
Printing from 1. Printing from 7527 
7524 
2. Print7525 
2. Printing from 7525 
7526 
1. Printing from ing from 7524 
1. 2. Print from 
0

 あなたは です。

+0

この回答にフラグを立てている人には、ちょっと軽いと正しいです。それが提示された方法が嫌いなら、downvotingを提案してください。 2人の改造者はすでに答えを見て、それが受け入れられると考えました。 –

関連する問題