DeadlineExceededError变通办法

时间:2011-03-14 07:24:20

标签: java google-app-engine

我正在制作类似网络蜘蛛的东西。 它将从WEB LIST中捕获我想要的数据。 WEB LIST的数量约为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);
        }
    }

3 个答案:

答案 0 :(得分:3)

如果您正在使用网络蜘蛛,最好的方法是使用任务队列:

Java Task Queue docs

Python Task Queue docs

答案 1 :(得分:2)

在迭代你的id时,请保留一个计数器。当您捕获DeadLineExceededError时,将计数器作为参数传递给从该位置开始处理的任务。这将按顺序完成。您还可以拆分作业并同时处理多个任务。

答案 2 :(得分:0)

引发了两个DeadlineExceededError个。您可以在第一时间捕获它,并整理您的状态,以便稍后再次继续或为下一阶段产生任务。

第二次你无法抓住DeadlineExceededError