raku - Perl6:无法调用此对象(REPR:P6opaque;Parallel::ForkManager)
问题描述
我正在尝试使用 Perl5 在 Perl6 中并行运行一系列 shell 命令,Parallel::ForkManager
这是对工作 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 命令。
然而,这个神秘的错误出现了:
无法在 2.aws_cp.p6 第 18 行的子 run_parallel 中调用此对象 (REPR: P6opaque; Parallel::ForkManager) 在 2.aws_cp.p6 第 39 行的块中
为什么 Perl6 会这样说?怎么了?我怎样才能让这些命令运行?
也许有一种更本机/惯用的方式在 Perl6 中并行运行 shell 命令?
解决方案
您可能想看看使用Proc::Async在线程中异步运行外部命令,而无需派生单独的代码实例来执行此操作。
推荐阅读
- intellij-idea - 有没有办法在 JetBrains IDE(PhpStorm、WebStorm IntelliJ 等)中搜索“未版本化的文件”
- asp.net - 类似 SignalR 的功能不起作用
- python - 无法打开使用 Django 下载的 Zip 文件
- c# - 嵌套时动态添加到Repeater的控件不会引发回发事件
- r - 通过 RStudio 编织时避免打印控制台控制字符
- c - 如何将二维数组分配给指向数组的指针
- javascript - 如何检查字符串是否包含在数组中?不和谐.js
- regex - 将 PascalCase 中的键替换为 maj SNAKE_CASE vscode
- acumatica - 在创建装运操作时无法将 UDF 从 SOLine (SO301000) 复制到 SOShipLine(SO302000)
- vb.net - OpenXml SDK word 文档更改不可见