私はPerlの初心者であり、XML :: Writerを使用して並列プロセスの出力をXMLファイルに書き込もうとしていますが、生成されたXMLで一部のプロセス出力が欠落していることがわかります。
$ xmlWriterをスレッドセーフにして、出力の書き込み中に問題が発生しないようにするのを手伝ってください。
並列処理を生成するためにForkManagerを使用しています
my $xmlWriter = XML::Writer->new( OUTPUT => output.xml )
...
$pm = new ForkManager(50);
$xmlWriter->startTag("report");
foreach $cmd(@cmdList) {
$pid = $pm->start($cmd) and next;
timeout 300 => sub {
$status= system($cmd);
....
$xmlWriter->startTag("task","command"=>"$cmd");
$xmlWriter->startTag("status");
$xmlWriter->characters("$status");
$xmlWriter->endTag("status");
$xmlWriter->endTag("task");
}
}
$xmlWriter->endTag("report");
...
また、XMLに書き込む前に、$ xmlWriterをthread::shared
変数として作成しようとしlock($xmlWriter)
ましたが、同じ問題に直面しています。
これについてあなたの助けに感謝します!