在perl中,我有一些像
这样的代码my $enter = `curl -s -m 10 http://URL`;
我如何使用线程一次运行此功能10次?
我发现this但我不确定如何使用它来设置特定数量的线程
编辑:我想我误解了Threads :: Queue正在做什么。我原来的问题仍然代表同时运行多个命令。
答案 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;