[英]How to set timeout for urlfetch in Google App Engine?
我正在嘗試讓Django(在GAE之上)從另一個Web服務獲取數據。 我經常遇到這樣的錯誤:
ApplicationError:2超時請求
方法:GET
請求網址: http:// localhost:8080 /
異常類型:DownloadError
異常值:ApplicationError:2超時
例外位置:_get_fetch_result中的/google_appengine/google/appengine/api/urlfetch.py,第325行
感覺就好像它會在12秒后超時(我不確定,但它真的很短)。
問題:如何設置更長的超時?
看到這是一個Python
問題,我想我會為遇到這個問題的人提供Python答案。
只需導入urlfetch
,然后在代碼中執行任何其他操作之前定義截止日期:
from google.appengine.api import urlfetch
urlfetch.set_default_fetch_deadline(60)
您可以使用fetch函數的deadline
參數進行設置。 來自文檔 :
請求處理程序的截止日期最長為60秒,任務隊列和cron作業處理程序的截止日期最長為10分鍾。 如果截止日期為無,則截止日期設置為5秒。
編輯:看起來現在已經改變了。 從這里 :
您可以為請求設置截止日期,即服務等待響應的最長時間。 默認情況下,獲取的截止時間為5秒。 您可以使用
urlfetch.set_default_fetch_deadline()
函數調整請求的默認截止時間。
此頁面列出了默認的超時值:
目前,Python運行時有幾個名為DeadlineExceededError的錯誤:
google.appengine.runtime.DeadlineExceededError
:如果整個請求超時(通常在60秒后)或10分鍾的任務隊列請求,則引發。google.appengine.runtime.apiproxy_errors.DeadlineExceededError
:如果RPC超過其截止日期,則引發此問題。 這通常為5秒,但可以使用“截止日期”選項為某些API設置。google.appengine.api.urlfetch_errors.DeadlineExceededError
:如果URLFetch超時則引發。
對於Go,您可能想嘗試下面的代碼。
// createClient is urlfetch.Client with Deadline
func createClient(context appengine.Context, t time.Duration) *http.Client {
return &http.Client{
Transport: &urlfetch.Transport{
Context: context,
Deadline: t,
},
}
}
以下是如何使用它。
// urlfetch
client := createClient(c, time.Second*60)
它似乎很短但你必須知道GAE上一個請求的超時大約是30秒。 由於您可能需要對urlfetch的響應執行一些操作,因此我認為不需要超過10秒的超時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.