2011-08-19 111 views
5

我們使用boto提供的domain.select()方法來查詢SimpleDB。對於較小的查詢(涉及幾個小時的數據的查詢),此方法工作正常。但是,當我開始使用 多線程和較長的查詢(24小時的數據),就開始計時了,在標準輸出上給予以下錯誤:如何處理boto中的請求超時(408)錯誤?

------------------------- 
     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> 

我想實現一個重試機制(指數退避),當這遇到錯誤。博託不會爲這個錯誤拋出任何異常,只是打印它。爲了實現重試機制,我需要某種錯誤代碼或異常來了解發生錯誤。

任何想法如何在博托實現這一點?

回答

4

博託將重試503,但不能在408

有幾件事情,這將使博託重試,包括503(服務不可用),並嘗試連接時,某些類型的HTTP錯誤。它將使用指數回退,默認情況下最多嘗試5次。您可以通過在.boto配置文件設置num_retries改變重試次數:

[Boto] 
num_retries = 3 

我不知道爲什麼它不會對408的AWS文檔我見過建議這樣做重試。

+0

感謝您的回覆。是的,它在503上重試,但是沒有辦法找到它,它對408做了什麼,它也沒有拋出任何異常...... boto文檔吸人。 – Sujit

+0

Boto不會在408響應中重試,因爲幾年前我們要求而不是AWS。如果AWS文檔現在聲明應該重試它,那麼應該更改boto以重試它。我會建議在github上提交一張票,我會親自處理。 – garnaat

+1

順便說一句,Sujit,你可以更具體地討論boto文檔的問題嗎?我總是樂於從社區獲得改進建議。謝謝! – garnaat