まず第一に、私はPerlに不慣れです。PerlのRESTAPIで複数(たとえば160)のHTTPGETリクエストを作成したい。次々と実行するのは時間がかかるので、リクエストを並行して実行することを考えていました。したがって、スレッドを使用して同時により多くのリクエストを実行し、並列リクエストの数を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";
}
}
だから私の質問は、なぜ私は最初はメモリを使い果たしていないのに、2回目は(私のコードで重要な何かを見逃しているのですか)?そして、それを防ぐために私は何ができますか?または、並列GETリクエストを実行するためのより良い方法はありますか?