est*_*est 5 perl asynchronous anyevent io-async
我是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";
Run Code Online (Sandbox Code Playgroud)
我猜你的意思AnyEvent::Util是不是AnyEvent::Tool。
condvars否则,我还没有尝试过你的程序,但对我来说它看起来像是使用and的教科书示例run_cmd。它肯定接近我自己写的内容(我是 的作者AnyEvent),正确处理棘手的部分(有一个外部开始/结束以@files防空),进行错误检查等等。
因此,如果您问我,您实际上确实阅读了文档并利用您的知识通过了考试:)
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |