我正在尝试用 Perl 编写一些东西(但我也很高兴使用 Python 或 PHP 来做同样的事情):
获取列表(例如文件或 URL)
添加额外的系统命令(例如
cp
)在总共一千个命令的列表中最多执行十个这样的命令
等待 10 个槽位之一成为并开始一个新过程,从而遍历 1000 个元素。
我现在正在走捷径,使用反引号来执行 Perl 中的命令,但如果有更好的方法来实现这一点,我将非常感激。
请您参考如下方法:
您应该展示您所写的内容,否则我们无法知道什么可能是“更好的方法”
您或许应该看看 Parallel::ForkManager 。使用该模块,您的程序可能看起来像这样
这段代码缺少很多东西,最重要的是use strict
和use warnings 'all'
,以及@list
的声明和填充。我相信你能填空
注意,10个并行进程的限制是模块规定的,"..."
必须自己填写作为目标路径。最好在 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;
}