gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:15:04 24 4
gpt4 key购买 nike

在 perl 中,我有一些代码,例如

my $enter = `curl -s -m 10 http://URL`;

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

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

编辑:我想我误解了 Threads::Queue 在做什么。我最初的问题仍然是同时运行多个命令。

最佳答案

您可以使用 fork() .在本例中,我使用 Parallel::ForkManager模块。 $max_forks是同时运行的进程数(例如设置为两个),您可以将系统/ 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;

关于multithreading - Perl:一次运行多个系统命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30745541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com