Perl或Bash线程池脚本?

pap*_*jam 7 bash perl multithreading threadpool

我有一个脚本 - 一个线性的命令列表 - 需要很长时间才能顺序运行.我想创建一个实用程序脚本(Perl,Bash或其他可用于Cygwin),它可以从任何线性脚本读取命令并将它们分配给可配置数量的并行工作程序.

如果myscript是的话

command1
command2
command3
Run Code Online (Sandbox Code Playgroud)

我可以跑:

threadpool -n 2 myscript
Run Code Online (Sandbox Code Playgroud)

两个线程将被创建,一个有开始command1和其他command2.无论哪个线程首先完成其第一个作业,都会运行command3.

在深入Perl之前(已经很长时间了)我想我应该问专家这样的事情是否已经存在.我确信应该有这样的东西,因为它对于利用多CPU机器和并行网络传输(wgetscp)都非常有用.我想我不知道正确的搜索条件.谢谢!

Jam*_*son 3

在 Perl 中,您可以使用Parallel::ForkManager执行此操作:

#!/usr/bin/perl

use strict;
use warnings;
use Parallel::ForkManager;
my $pm = Parallel::ForkManager->new( 8 ); # number of jobs to run in parallel

open FILE, "<commands.txt" or die $!;
while ( my $cmd = <FILE> ) {
    $pm->start and next;
    system( $cmd );
    $pm->finish;
}
close FILE or die $!;

$pm->wait_all_children;
Run Code Online (Sandbox Code Playgroud)