gpt4 book ai didi

perl - XML 文件的并行处理

转载 作者:行者123 更新时间:2023-12-05 01:10:14 26 4
gpt4 key购买 nike

目前,我有一个使用 XML::Twig 并解析 20 个 XML 文件的应用程序。每个文件大小为 0.5GB,处理按顺序进行:

foreach (@files) {  
my $ti = XML::Twig->new(
keep_encoding => 1,
twig_handlers => {
'section' => sub { $_->purge(); }
}
)->parsefile($_);
}

perl 有没有办法并行运行这段代码,如果是,我该怎么做?我的应用程序在 Windows 系统上运行。

最佳答案

您应该使用 Parallel::ForkManager关闭 CPAN。这(带有一点 included explanation )应该允许您 fork 每个进程并并行地单独解析文件。另外,请注意 Perl 5 有 threads ,但性能提升可能并不显着。

链接页面上提供的代码应该可以满足您的需求,但为了您的方便,我已将其发布在此处。正如你所看到的,它真正做的就是创建一个新的数据结构来管理最大数量的允许进程,并为每个新数据片(或文件) fork 并返回子进程,完成工作,然后终止进程:

use Parallel::ForkManager;

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

foreach $data (@all_data) {
# Forks and returns the pid for the child:
my $pid = $pm->start and next;

... do some work with $data in the child process ...

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

请注意,如果您想在 Windows 上创建进程,您可能希望在 Windows 上使用 WINAPI(因为 Parallel::ForkManager 我相信使用 Windows 内核级线程,但仍应充分执行任务)。 Perl 还为您提供了使用 Win32::API 的选项的 CreateProcess() 函数在 Perl 中进行多处理(前提是您导入它)。还有 Forks::Super 的选项用于多处理的包,它也适用于 Windows。

关于perl - XML 文件的并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20839923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com