私のローカル マシンではスクリプトは問題なく動作しますが、クラウドでは常に 500 になります。これはcronタスクなので、5分かかってもかまいません...
< クラス 'google.appengine.runtime.DeadlineExceededError' >:
タイムアウトを増やすことが可能かどうか考えていますか?
ありがとう、るい
私のローカル マシンではスクリプトは問題なく動作しますが、クラウドでは常に 500 になります。これはcronタスクなので、5分かかってもかまいません...
< クラス 'google.appengine.runtime.DeadlineExceededError' >:
タイムアウトを増やすことが可能かどうか考えていますか?
ありがとう、るい
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
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