首先,我是 Perl 的新手。我想在 Perl 的 REST API 上发出多个(例如 160 个)HTTP GET 请求。一个接一个地执行它们需要很长时间,所以我正在考虑并行运行这些请求。因此,我使用线程同时执行更多请求,并将并行请求的数量限制为 10。这在我第一次运行程序时工作得很好,第二次在第 40 个请求之后运行“内存不足”。
这是代码:(@urls 包含请求的 160 个 URL)
while(@urls) {
my @threads;
for (my $j = 0; $j < 10 and @urls; $j++) {
my $url = shift(@urls);
push @threads, async { $ua->get($url) };
}
for my $thread (@threads) {
my $response = $thread->join;
print "$response\n";
}
}
所以我的问题是,为什么我第一次没有用完内存,但第二次没有(我的代码中是否遗漏了一些重要的东西)?我能做些什么来防止它?还是有更好的方法来执行并行 GET 请求?