5

boto が提供する domain.select() メソッドを使用して、SimpleDB にクエリを実行します。小規模なクエリ (数時間のデータを含むクエリ) の場合、この方法はうまく機能します。しかし、複数のスレッドとより長いクエリ (24 時間のデータ) の使用を開始すると、タイムアウトが開始され、stdout で次のエラーが発生します。

-------------------------
         4 0 8
...
<?xml version="1.0"?>
<Response><Errors><Error><Code>QueryTimeout</Code><Message>A timeout occurred when attempting to query domain 'd110824' with query expression 'select * from `d110824` where `timestamp` &gt;= '2011-08-24T10:45:56' and `timestamp` &lt; '2011-08-25T10:45:56' and `identifier` = '00063F052C49' order by `timestamp` asc </Message><BoxUsage>0.0055590278</BoxUsage></Error></Errors><RequestID>....</RequestID></Response>

このエラーが発生したときに、再試行メカニズム (指数バックオフ) を実装したいと考えています。Boto は、このエラーに対して例外をスローせず、単純に出力します。再試行メカニズムを実装するには、エラーが発生したことを知るために、何らかのエラー コードまたは例外が必要です。

botoでこれを達成する方法について何か考えはありますか?

4

2 に答える 2

4

私はbotoで同じ問題を抱えていて、それをフォークして指数バックオフを直接追加することになりました。https://github.com/datacratic/boto/blob/develop/boto/sdb/queryresultset.py#L83を参照してください。

于 2012-08-30T13:56:39.133 に答える
4

Boto は 503 で再試行しますが、408 では再試行しません。

503 (サービスが利用できません) や、接続しようとしたときの HTTP エラーなど、boto が再試行される原因はいくつかあります。指数バックオフを使用し、デフォルトで最大 5 回試行します。num_retries.boto 構成ファイルで設定することにより、再試行回数を変更できます。

[Boto]
num_retries = 3

408 で再試行しない理由がわかりません。私が見た AWS ドキュメントでは、そうすることが推奨されています。

于 2011-08-22T18:33:31.747 に答える