Jay*_*Jay 0 perl multithreading
我是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");
...
Run Code Online (Sandbox Code Playgroud)
我还尝试将$ xmlWriter作为thread::shared变量并lock($xmlWriter)在写入XML之前,但面临同样的问题.
感谢您对此的帮助!
不知道是不是要开始.
您需要将自己限制为一个XML :: Writer对象.让所有工作人员将其输出发送回父级,并让父级从发送的数据中创建XML.
如果使用Parallel :: ForkManager,则按照文档的"数据结构检索"中的示例发送回输出.
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |