【发布时间】:2016-08-18 05:04:31
【问题描述】:
我是 Perl 5 异步进程的新手,我很高兴CPAN 提供了与我们可以在 Node.js 中使用 AnyEvent、IO::Async 等实现的类似支持。但是,本教程提供了一些复杂内容的示例。我只需要使用 AnyEvent 并行运行外部系统命令。
在下面的示例中,我是否正确地异步压缩了多个文件?请不要担心运行系统命令 zip 而不是使用 CPAN 模块;该示例纯粹是为了演示运行异步进程的想法...
#!/bin/env perl
use strict;
use AnyEvent;
use AnyEvent::Util;
my $s1 = time;
my $quit_program = AnyEvent->condvar(
cb => sub {
warn "Done async";
}
);
my $result;
$quit_program->begin( sub { shift->send($result) } );
for my $file (@files) {
$quit_program->begin;
my $cv; $cv = run_cmd [qw(zip), "${file}.zip", $file],
"<" , "/dev/null",
">" , "/dev/null",
"2>", "/dev/null";
$cv->cb (sub {
shift->recv and die "command failed";
# undef $cv;
$quit_program->end;
});
}
$quit_program->end; # end loop
my $foo = $quit_program->recv;
say "Total elapsed time: ", time - $s1, " ms";
【问题讨论】:
标签: perl asynchronous anyevent io-async