プロが教えるわが家の防犯対策術!

こんにちは。
ubuntu12.10上でParallel::ForkManagerを利用しようとしていますが、子プロセスのファイルへの書き込みの順序で困っています。
いくつかの実験の結果$iを子プロセスごとに1づつ増やして表示させても
1,2,4,5,3,6,8,9,7・・・となり子プロセスを作った順序で終了しません。
fileへの書き込みを順序良く行わせる方法はありませんか?

A 回答 (1件)

並列処理、ってそういうもの(子プロセス同士の実行順番が一定とは限らない)だと思いますが。



順番が重要なら、それを制御する必要があります。
・親プロセスで結果を受けとって、順番に並べてファイルに出力
・子プロセス側で、「自分の番」が来るまで、ファイル出力を待つ
・子プロセス1の終了を待って子プロセス2を実行(並列の意味無し)

この回答への補足

プログラムは
use Web::Scraper;
use WWW::Mechanize::Firefox;
use URI;
binmode STDOUT,":utf8";

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime();
$year += 1900 ;
$mon += 1 ;

$File = "yuma-$year:$mon:$mday:$hour.txt" ;
open (file,"> $File") or die 'fail to open file\n';

print "HOW MUCH PAGE\n" ;
my $page = <STDIN> ;

print "WITEING...\n" ;

my $s = scraper {
process 'font',sen => 'TEXT';
result 'sen';
};
my $r = scraper {
process 'div#content',ren => 'TEXT';
result 'ren';
};

for ($i = 1;$i <= $page;$i) {

my $uri = URI -> new ("目的とするURL");

my $mech = WWW::Mechanize::Firefox->new();
$mech->get($uri) ;

print file $s->scrape($mech->content) ;
print file "\n" ;
print file $r->scrape($mech->content) ;
print file "\n" ;

}
print "WITEID\n" ;

close (file) ;
です。

補足日時:2013/01/22 17:54
    • good
    • 0
この回答へのお礼

ながったらしくなったらいけないかなとおもったので書きませんでしたがwww::mecanize::firefoxの起動、それがurlからget,
書き込みとなるなかでまえ2つの時間がかかりすぎ困っています。
・子プロセス側で、「自分の番」が来るまで、ファイル出力を待つ
方法を初心者レベルで教えていただけませんか?

お礼日時:2013/01/22 14:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!