gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:42:39 26 4
gpt4 key购买 nike

我是 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";

最佳答案

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

否则,我还没有尝试过您的程序,但它看起来像是使用 condvars 的教科书示例和 run_cmd对我来说。它肯定与我自己写的很接近(我是 AnyEvent 的作者),正确处理了棘手的部分(在 @files 为空的情况下有一个外部开始/结束),进行错误检查等等。

因此,如果您问我,您实际上确实阅读了文档并使用您的知识通过了考试:)

关于perl - 如何使用 AnyEvent 和 Perl 并行运行外部命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23330629/

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