如何在Perl中使用HTTP :: Async一次发出25个请求?
发布时间:2020-12-15 23:36:47 所属栏目:大数据 来源:网络整理
导读:我正在做很多HTTP请求,我选择HTTP :: Async来完成这项工作.我有超过1000个请求,如果我只是执行以下操作(请参阅下面的代码),许多请求在处理时会超时,因为在处理它们之前可能需要几十分钟: for my $url (@urls) { $async-add(HTTP::Request-new(GET = $url));
我正在做很多HTTP请求,我选择HTTP :: Async来完成这项工作.我有超过1000个请求,如果我只是执行以下操作(请参阅下面的代码),许多请求在处理时会超时,因为在处理它们之前可能需要几十分钟:
for my $url (@urls) { $async->add(HTTP::Request->new(GET => $url)); } while (my $resp = $async->wait_for_next_response) { # use $resp } 所以我决定每次做25个请求,但我想不出用代码表达它的方法. 我尝试了以下方法: while (1) { L25: for (1..25) { my $url = shift @urls; if (!defined($url)) { last L25; } $async->add(HTTP::Request->new(GET => $url)); } while (my $resp = $async->wait_for_next_response) { # use $resp } } 然而这并不好用,因为它现在太慢了.现在它等待所有25个请求都被处理,直到它再添加25个.所以如果它还有2个请求,它什么都不做.我要等待处理所有请求以添加下一批25. 我如何改进这种逻辑,使$async在处理记录时做一些事情,同时也确保它们不会超时. 解决方法
你很亲密,你只需要结合这两种方法! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |