3

例外が発生した場合にタスクを自動的に再試行するGAE の「deffered」ライブラリ (python) を使用しています。

タスクが試行された回数を (タスク ハンドラ関数内で) 知る方法はありますか?

私の最終目標は、次のようなものを実装することです。

if num_tries >5:
  email_admins()
  raise deferred.PermanentTaskFailure

最初は「TaskRetryOptions」を使用して試行回数を制限できると思っていましたが、それでは email_admins() 呼び出しのメカニズムが提供されないと思います。それともそうですか?

[編集] もちろん、DB や memcache の試行回数を読み書きすることはできますが、その複雑さは避けたいと思います。可能であれば、タスク/タスク キューから詳細を取得したいと思います。

4

1 に答える 1

8

タスクhttps://developers.google.com/appengine/docs/python/taskqueue/overview-pushで自動的に設定されるヘッダーがいくつかあり ます

X-AppEngine-TaskRetryCount、このタスクが再試行された回数。最初の試行の場合、この値は 0 です。この数には、使用可能なインスタンスがないためにタスクが失敗し、実行フェーズに到達しなかった試行が含まれます。

X-AppEngine-TaskExecutionCount、実行フェーズ中にこのタスクが以前に失敗した回数。この数には、使用可能なインスタンスの不足による障害は含まれていません。

編集1

これらの値は以下にアクセスできます。

num_tries  = self.request.headers.get('X-AppEngine-TaskRetryCount')

編集2

http://webapp-improved.appspot.com/api/webapp2.html#webapp2.get_request

遅延試行の場合:

request = webapp2.get_request()
于 2013-10-25T01:40:09.893 に答える