gpt4 book ai didi

raku - Perl6:无法调用此对象(REPR:P6opaque;Parallel::ForkManager)

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

我正在尝试使用 Perl5 的 Parallel::ForkManager 在 Perl6 中并行运行一系列 shell 命令。
这是工作 Perl5 代码的几乎精确的翻译。

CONTROL {
when CX::Warn {
note $_;
exit 1;
}
}
use fatal;
role KeyRequired {
method AT-KEY (\key) {
die "Key {key} not found" unless self.EXISTS-KEY(key);
nextsame;
}
}

use Parallel::ForkManager:from<Perl5>;

sub run_parallel (@cmd) {
my $manager = Parallel::ForkManager(8).new();
for (@cmd) -> $command {
$manager.start and $manager.next;
my $proc = shell $command, :out, :err;
if $proc.exitcode != 0 {
put "$command failed";
put $proc.out.slurp;
put $proc.err.slurp;
die;
}
$manager.finish;
}
$manager.wait_all_children;#necessary after all lists
}

my @cmd;
my Str $dir = 'A/1';
for dir($dir, test => /\.vcf\.gz$/) -> $vcf {
@cmd.append: "aws s3 cp $vcf s3://s3dir/$dir/"
}
put @cmd.elems;
run_parallel(@cmd);

基本上,我正在尝试并行化繁琐的 shell 命令。

然而,这个神秘的错误出现了:

Cannot invoke this object (REPR: P6opaque; Parallel::ForkManager) in sub run_parallel at 2.aws_cp.p6 line 18 in block at 2.aws_cp.p6 line 39



为什么 Perl6 会这样说?怎么了?我怎样才能让这些命令运行?

也许有一种更本地/惯用的方式在 Perl6 中并行运行 shell 命令?

最佳答案

你可能想看看使用 Proc::Async它在线程中异步运行外部命令,而无需 fork 单独的代码实例来执行此操作。

关于raku - Perl6:无法调用此对象(REPR:P6opaque;Parallel::ForkManager),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55283458/

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