【发布时间】:2012-10-24 15:03:29
【问题描述】:
首先,我是 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 请求?
【问题讨论】:
标签: multithreading perl