6

私のローカル マシンではスクリプトは問題なく動作しますが、クラウドでは常に 500 になります。これはcronタスクなので、5分かかってもかまいません...

< クラス 'google.appengine.runtime.DeadlineExceededError' >:

タイムアウトを増やすことが可能かどうか考えていますか?

ありがとう、るい

4

3 に答える 3

9

30 秒を超えることはできませんが、タスク キューを使用し、データ セットを徐々に反復して処理するタスクを作成することで、間接的にタイムアウトを増やすことができます。もちろん、そのようなタスクの実行はそれぞれ、タイムアウト制限に収まる必要があります。

編集

具体的には、データストア クエリ カーソルを使用して、同じ場所で処理を再開できます。

http://code.google.com/intl/pl/appengine/docs/python/datastore/queriesandindexes.html#Query_Cursors

SDK 1.3.1 で最初に導入された:

http://googleappengine.blogspot.com/2010/02/app-engine-sdk-131-include-major.html

于 2010-06-01T21:28:48.547 に答える
9

DB クエリのタイムアウトの正確なルールは複雑ですが、クエリは約 2 分以上存続できず、バッチは約 30 秒以上存続できないようです。カーソルを使用してタイムアウトを回避し、ジョブを複数のクエリに分割するコードを次に示します。

def make_query(start_cursor):
  query = Foo()

  if start_cursor:
    query.with_cursor(start_cursor)

  return query

batch_size = 1000
start_cursor = None

while True:
  query = make_query(start_cursor)
  results_fetched = 0

  for resource in query.run(limit = batch_size):
    results_fetched += 1

    # Do something

    if results_fetched == batch_size:
      start_cursor = query.cursor()
      break
  else:
    break
于 2012-08-02T23:29:13.787 に答える