gpt4 book ai didi

perl - 如何在 Perl 中发出并行 HTTP 请求,并按顺序接收它们?

转载 作者:可可西里 更新时间:2023-11-01 15:24:41 26 4
gpt4 key购买 nike

使用 Perl,我正在寻找一种简单的方法来并行执行一些 HTTP 请求,在这些请求完成后,我会按照发送它们的相同顺序获得响应,例如:

my ($google, $perl) = foobar(GET => 'http://www.google.com/',
GET => 'http://www.perl.org/');

是否有我应该查看的模块?

我知道我可以手工记账,但是在能够使用 jQuery's when method 来做这件事后我感觉被宠坏了,而且我很想拥有一个使用 Perl 的简单解决方案。

感谢您的帮助。

最佳答案

use threads;
use LWP::UserAgent qw( );

my $ua = LWP::UserAgent->new();
my @threads;
for my $url ('http://www.google.com/', 'http://www.perl.org/') {
push @threads, async { $ua->get($url) };
}

for my $thread (@threads) {
my $response = $thread->join;
...
}

最好的部分是父级不会等待所有请求完成。一旦正确的请求完成,父级将解除阻塞以处理它。


如果您使用了 Parallel::ForkManager或者您不能等待特定 child 的其他事情,您可以使用以下代码对结果进行排序:

for my $id (0..$#urls) {
create_task($id, $urls[$id]);
}

my %responses;
for my $id (0..$#urls) {
if (!exists($responses{$id})) {
my ($id, $response) = wait_for_a_child_to_complete();
$responses{$id} = $response;
redo;
}

my $response = delete($responses{$id});
...
}

关于perl - 如何在 Perl 中发出并行 HTTP 请求,并按顺序接收它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372723/

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