我在做一个类似网络蜘蛛的东西。它将从WEB列表中捕获我想要的数据。WEB列表的数量约为20个,每个列表可以在1到10秒内完成。
我知道DeadlineExceededError意味着我的请求处理程序没有在30秒内完成。我也知道我不能改变30秒的限制。
所以我需要把我的工作分成几个小块,但我不知道怎么做。
下面是我的代码:
List<String> ids = agent.getWebList();
if(ids.iterator().hasNext()) {
for(String id : ids) {
Data d = agent.getDetailedDataById(id);
agent.updateData(d);
}
}发布于 2011-03-14 19:17:42
如果你正在使用网络爬虫,最好的方法是使用任务队列:
Java Task Queue docs
Python Task Queue docs
发布于 2011-03-14 20:55:34
在迭代您的ids时,请保留一个计数器。当您捕获DeadLineExceededError时,将计数器作为参数传递给从该位置开始处理的任务。这将按顺序完成。您还可以拆分作业,并将其分配给多个任务同时处理。
发布于 2011-03-14 17:04:27
将引发两个DeadlineExceededError。您可以在第一次捕获它,并整理您的状态,以便稍后再次继续或为下一阶段产生一个任务。
你不可能第二次抓到DeadlineExceededError。
https://stackoverflow.com/questions/5295833
复制相似问题