我是 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");
...
我也尝试将 $xmlWriter 作为thread::shared
变量并lock($xmlWriter)
在写入 XML 之前,但面临同样的问题。
感谢您对此的帮助!