Google App Engine サービスでの db.put() 操作を可能な限り回復力のあるものにして、インフラストラクチャの問題や過負荷が発生した場合でも成功する可能性を最大限に高めたいと考えています。現時点で思いついたのは、発生する可能性のあるすべての例外をキャッチし、最初の試行が失敗した場合にコミットを再試行するタスクを作成することです。
try:
db.put(new_user_record)
except DeadlineExceededError:
deferred.defer(db.put,new_user_record)
except:
deferred.defer(db.put,new_user_record)
このコードは考えられるすべてのエラー パスをトラップしますか? または、このコードでキャッチされない db.put() が失敗する可能性がある他の方法はありますか?
2013 年 3 月 28 日の編集 - いつ失敗が予想されるかを明確にする
これまでの回答では、 db.put() が失敗した場合、それはデータストアがダウンしているためであると想定しているようです。かなり負荷の高いアプリケーションを実行した私の経験では、これは必ずしも要件ではありません。ワークロード固有の API のボトルネックに遭遇することもあれば、ある API の速度が遅いために別の API でリクエストの期限が切れてしまうこともあります。このようなイベントの頻度は低くても、トラフィックが多い場合、その数はかなりの数になる可能性があります。これらは、私がカバーしようとしている状況です。