簡體   English   中英

如何在Google App Engine中為urlfetch設置超時?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM