我目前正在研究涉及抓取某些网站的项目。然而,有时我的Perl程序会因为某种原因在网站上“卡住”(不知道为什么),程序会冻结几个小时。为了解决这个问题,我插入了一些代码来超时爬取网页的子例程。问题在于,假设我将闹钟设置为60秒,大部分时间页面都会正确超时,但有时候程序不会超时,只是坐下几个小时(也许是永远的,因为我通常会杀死程序)。Perl闹钟间歇性工作
在真正糟糕的网站上,Perl程序只会通过我的记忆吃掉内存,占用2.3GB内存和13GB交换空间。此外,CPU使用率会很高,而且我的电脑会很慢。幸运的是,如果超时,所有的资源都会很快发布。
这是我的代码还是Perl的问题? 我应该纠正什么,为什么会导致此问题?
感谢
这里是我的代码:
eval {
local $SIG{ALRM} = sub { die("alarm\n") };
alarm 60;
&parsePageFunction();
alarm 0;
};#eval
if([email protected]) {
if([email protected] eq "alarm\n") { print("Webpage Timed Out.\n\n"); }#if
else { die([email protected]"\n"); }#else
}#if
请粘贴/描述你的解析/抓取/抓取功能,谢谢。 – miedwar 2010-07-13 17:10:14