【发布时间】:2020-06-14 06:09:13
【问题描述】:
我正在编写一个网络爬虫,部分规范是它将在用户指定的时间内爬取网络。为此,我尝试使用 Timer 和 TimerTask 方法。我现在拥有的代码是第二次尝试。我看过一些教程,尽管它们都不是我需要的。我也通读了文档。我已经在这个项目上工作了几个星期了,今晚就到期了。我不确定下一步该转向哪里。
public void myTimer (String url, long time)
{
Timer webTimer = new Timer();
TimerTask timer;
timer = new TimerTask()
{
public void run()
{
long limit = calculateTimer(time);
while(System.currentTimeMillis() < limit)
{
webcrawler crawler1 = new webcrawler();
crawler1.Crawl(url);
}
System.out.println("times Up");
}
};
webTimer.schedule(timer, 1000);
}
【问题讨论】:
-
是否要在 URL 中间停止爬虫?你不能杀死一个线程(不再) - 这很危险。你可以
interruptThread,但这可能有效也可能无效,并且可能会影响未经测试的代码路径。 -
是的,我需要在用户指定的一段时间后停止网络爬虫,而不会杀死整个程序。它是项目规范的一部分。我希望我可以使用 Timer 和 TimerTask 方法,但上面的代码似乎没有运行。 print 语句永远不会打印出来。
-
你可以在你的 http 客户端设置超时时间。
-
我可能来不及做出贡献,但我想到的第一个解决方案(如果我正确理解您的问题)是使用ExecutorService 或类似的东西。它们为您提供了在给定时间过去后停止进程的必要选项。
标签: java