我正在尝试用Perl编写一些东西(但我也很高兴使用Python或PHP来做同样的事情):
-
获取列表(例如,文件或 URL)
-
添加额外的系统命令(例如
cp
) 在总共一千个列表中最多执行十个这样的命令
等待十个插槽中的一个成为并开始一个新过程,从而在 1000 个元素中移动。
我现在正在走捷径,并使用反引号在 Perl 中执行命令,但如果有更好的方法来实现这一目标,我将不胜感激。
你应该展示你写的东西,否则我们无法知道什么是"更好的方法"
你可能应该看看 Parallel::ForkManager。使用该模块,您的程序可能如下所示
这个代码中缺少很多,最重要的是use strict
和use 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;
}