В настоящее время я работаю над проектом, который включает сканирование определенных веб-сайтов. Однако иногда моя Perl-программа по какой-то причине «застревает» на веб-сайте (не может понять, почему), и программа зависает на несколько часов. Чтобы обойти это, я вставил некоторый код для тайм-аута в подпрограмму, которая сканирует веб-страницу. Проблема заключается в том, что, допустим, я установил будильник на 60 секунд, большую часть времени страница корректно отключается, но иногда программа не срабатывает и просто просидела несколько часов подряд (возможно, навсегда, так как я обычно убиваю программа).
На действительно плохих веб-сайтах программа Perl просто забирает мою память, занимая 2,3 ГБ ОЗУ и 13 ГБ подкачки. Также использование процессора будет высоким, и мой компьютер будет вялым. К счастью, если время ожидания истекло, все ресурсы быстро освобождаются.
Это мой код или проблема с Perl?
Что я должен исправить и почему это вызвало эту проблему?
Спасибо
Вот мой код:
eval {
local $SIG{ALRM} = sub { die("alarm\n") };
alarm 60;
&parsePageFunction();
alarm 0;
};#eval
if($@) {
if($@ eq "alarm\n") { print("Webpage Timed Out.\n\n"); }#if
else { die($@."\n"); }#else
}#if