Perl:一次运行多个系统命令

时间:2015-06-10 01:22:54

标签: multithreading perl

在perl中,我有一些像

这样的代码
my $enter = `curl -s -m 10 http://URL`;

我如何使用线程一次运行此功能10次?

我发现this但我不确定如何使用它来设置特定数量的线程

编辑:我想我误解了Threads :: Queue正在做什么。我原来的问题仍然代表同时运行多个命令。

1 个答案:

答案 0 :(得分:7)

您可以使用fork()。在此示例中,我使用Parallel::ForkManager模块。 $max_forks是要同时运行的进程数(例如设置为2),并且您将系统/ curl代码放在### add curl logic here之后,并删除print()和来自那里的sleep()示例语句。

#!/usr/bin/perl

use warnings;
use strict;

use Parallel::ForkManager;

my $max_forks = 2;

my $fork = new Parallel::ForkManager($max_forks);

my @urls = (
             'http://perlmonks.org', 
             'http://stackoverflow.com',
             'http://slashdot.org', 
             'http://wired.com',
);

# on start callback

$fork->run_on_start(
    sub {
            my $pid = shift;
            print "Starting PID $pid\n";
    }
);

# on finish callback

$fork->run_on_finish(
    sub {
        my ( $pid, $exit, $ident, $signal, $core) = @_;
        if ($core){
            print "PID $pid core dumped.\n";
        }
        else {
            print "PID $pid exited with exit code $exit " .
                  " and signal $signal\n";
        }
    }
);

# forking code

for my $url (@urls){

    $fork->start and next;

    ### add curl logic here
    print "$url\n";
    sleep(2);

    $fork->finish;
}

$fork->wait_all_children;