TL;DR:
Appengine でこのバグを回避するにはどうすればよいis_shutting_down
ですか?
詳細
Google Appengine アプリケーション (Python) にバックエンド インスタンスがあります。バックエンド インスタンスはレポートを生成するために使用されますが、完了するまでに数分から数時間かかることもあります。
予期しないシャットダウンに対処するために、True が返さruntime.is_shutting_down()
れたときにレポートの中間状態を監視して DB に保存しています。is_shutting_down
これが私がチェックするコードの部分です:
from google.appengine.api import runtime
#...
def my_report_function():
#...
# Check if we should interrupt and reschedule to avoid timeout error.
duration_sec = time.time() - start
too_long = MAX_SEC < duration_sec
is_shutting_down = runtime.is_shutting_down()
log.debug('Does this report iteration need to wrap it up soon? '
'Too long? %s (%s sec). Shutting down? %s'
% (too_long, duration_sec, is_shutting_down))
if too_long or is_shutting_down:
# save the state of report, reschedule next iteration, and return
うまくいくこともありますが、Appengine のログに次のように表示されることがあります。
D 2013-06-20 18:41:56.893 Does this report iteration need to wrap it up soon? Too long? False (348.865950108 sec). Shutting down? False
E 2013-06-20 18:42:00.248 Process terminated because the backend took too long to shutdown.
runtime.is_shutting_down()
によって返された値を確認してから、Appengine がバックエンドを強制終了するまでの間に、30 秒のタイムアウトが経過していないことは明らかです。
これがなぜ起こっているのか、そしてこれに対する回避策があるかどうかを誰かが知っていますか?
前もって感謝します!