2011-03-14 8 views
1

私はウェブスパイダーのようなものを作っています。 WEB LISTから必要なデータをキャッチします。 WEBリストの量は約20です。 1秒から10秒ほどで完了します。DeadlineExceededErrorの対処方法

私が知っているDeadlineExceededErrorは、リクエストハンドラが30秒以内に終了しなかったことを意味します。 私は30秒の制限を変更できないことも知っています。

私は自分の仕事を小さなものに分割する必要がありますが、それをどうやって行うのか分かりません。 Sが発生している

List<String> ids = agent.getWebList(); 

    if(ids.iterator().hasNext()) { 
     for(String id : ids) { 
      Data d = agent.getDetailedDataById(id); 
      agent.updateData(d); 
     } 
    } 
+0

GAEではない場合は、スレッドを使用して上限に達する直前に割り込みするのが最適な解決策です。それがGAEでない場合... –

+0

ありがとう、おそらく私は次回使用することができます – cht

答えて

3

最善のアプローチは、タスクキューを使用することです:

Java Task Queue docs

Python Task Queue docs

+0

これはJavaの質問だったので参考にしたいと思います。ここではJavaのタスクキューの概要を示します:http://code.google.com/appengine/docs/java/taskqueue/overview.html – Brummo

+0

制限時間タスクキューの場合、API 1.4.0では10分です。 –

+0

@Travis Webbは、1つのタスクの制限はありませんか?このシナリオでは、WEB LISTからのURLです。それは約1から10秒しかかからないので、それは大丈夫と思います。 – pahan

0

DeadlineExceededError

は、ここに私のコードです。あなたは初めてそれを捕まえることができます。そして、あなたの状態を整理して、後でやり直すか、次のステージのためにタスクを生み出す準備を整えましょう。

DeadlineExceededErrorを2度目にキャッチすることはできません。あなたがウェブスパイダーで作業している場合

+0

"2 DeadlineExceededErrorsが発生しました"とは何か説明できますか? または私はドキュメント上で知っておくべきことを忘れています。ありがとう。 – cht

+0

実行時間が10分のタスクキューを使用している場合、最初の期限超過エラー(ソフト)が10分後にスローされ、キャッチされます。 2つ目はハードデッドラインの制限で、キャッチできず、タスクはGAEによって終了されます。 – Sam

+0

あなたの明確な説明をありがとう。私はそういう形でやり遂げることができると思う。 – cht

2

あなたのIDを反復しながら、カウンターを保持します。 DeadLineExceededErrorをキャッチすると、その位置から処理を開始するタスクに引数としてカウンタを渡します。これは順次行われます。また、ジョブを分割して、同時に処理するいくつかのタスクに割り当てることもできます。

+0

ありがとう!本当に役に立ちました。 – cht

関連する問題