一次执行多个命令


Executing several commands at once

我正在尝试用Perl编写一些东西(但我也很高兴使用Python或PHP来做同样的事情):

  • 获取列表(例如,文件或 URL)

  • 添加额外的系统命令(例如cp

  • 在总共一千个列表中最多执行十个这样的命令

  • 等待十个插槽中的一个成为并开始一个新过程,从而在 1000 个元素中移动。

我现在正在走捷径,并使用反引号在 Perl 中执行命令,但如果有更好的方法来实现这一目标,我将不胜感激。

你应该展示你写的东西,否则我们无法知道什么是"更好的方法"

你可能应该看看 Parallel::ForkManager。使用该模块,您的程序可能如下所示

这个代码中缺少很多,最重要的是use strictuse warnings 'all',以及@list的声明和人口。我相信你可以填空

请注意,对十个并行进程的限制是由模块施加的,并且"..."必须由您自己填写作为目标路径。最好在Perl中做你需要的事情,而不是仅仅为了打电话给cp而掏钱,所以我File::Copy参与

其中。
use Parallel::ForkManager ();
use File::Copy 'copy';
my $pm = Parallel::ForkManager->new(10);
for my $file ( @list ) {
    next if my $pid = $pm->start;
    # Child code
    copy $file, "...";
    $pm->finish;
}