加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何使用AnyEvent和Perl并行运行外部命令

发布时间:2020-12-15 21:44:17 所属栏目:大数据 来源:网络整理
导读:我是Perl 5异步流程的新手,并且发现令人兴奋的是 CPAN提供了类似的支持,我们可以在 Node.js中使用AnyEvent,IO :: Async等.但是,本教程提供了一些复杂内容的示例.我需要的只是使用AnyEvent并行运行外部系统命令. 我是否在下面的示例中正确地执行了异步压缩多
我是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",">","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";

解决方法

我假设你的意思是AnyEvent :: Util而不是AnyEvent :: Tool.

否则,我还没有尝试过你的程序,但它看起来像是一个使用condvars和run_cmd给我的教科书示例.它肯定接近我自己编写的内容(我是AnyEvent的作者),得到了正确的棘手部分(如果@files为空则有一个外部开始/结束),进行错误检查等等.

所以,如果你问我,你实际上已经阅读了文档,并利用你的知识通过了考试:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读