2010-01-29 16 views
15

Django'yu (GAE'nin üzerinde) başka bir web hizmetinden veri getirmeye çalışıyorum. Sık sık böyle hata ile Vuruldum: sadece sonra 12 saniye zaman aşımına uğrayacaktır sanki hissediyor (emin değilim, ama gerçekten kısadır)Google App Engine'de urlfetch için zaman aşımı nasıl ayarlanır?

ApplicationError: 2 timed out Request

Method: GET

Request URL: http://localhost:8080/

Exception Type: DownloadError

Exception Value: ApplicationError: 2 timed out

Exception Location: /google_appengine/google/appengine/api/urlfetch.py in _get_fetch_result, line 325

.

Soru: Daha uzun bir zaman aşımı nasıl ayarlayabilirim?

cevap

23

fetch function'un deadline bağımsız değişkenini kullanarak ayarlayabilirsiniz. the docs Gönderen:

The deadline can be up to a maximum of 60 seconds for request handlers and 10 minutes for tasks queue and cron job handlers. If deadline is None, the deadline is set to 5 seconds.


Düzenleme: Bu şimdi değişmiş gibi görünüyor. here Gönderen:

You can set a deadline for a request, the most amount of time the service will wait for a response. By default, the deadline for a fetch is 5 seconds. You can adjust the default deadline for requests using the urlfetch.set_default_fetch_deadline() function.

Ve this page listeleri varsayılan zaman aşımı değerleri:

Currently, there are several errors named DeadlineExceededError for the Python runtime:

  • google.appengine.runtime.DeadlineExceededError : raised if the overall request times out, typically after 60 seconds, or 10 minutes for task queue requests.
  • google.appengine.runtime.apiproxy_errors.DeadlineExceededError : raised if an RPC exceeded its deadline. This is typically 5 seconds, but it is settable for some APIs using the 'deadline' option.
  • google.appengine.api.urlfetch_errors.DeadlineExceededError : raised if the URLFetch times out.
+0

Tamam, OP'nin Django kullandığını açıkça belirttiğinde, Java'yı kullanarak soruyu neden yanıtlamaya karar verdiğinizi anlayabilir miyim? Python eşdeğerini vermediniz :( – kassold

+0

Başkası, verdikten iki yıl sonra cevabımı düzenledi ve bir sebepten dolayı bir Java kod snippet'ine eklendi ... ilk satırdaki köprülere bakarsanız, Python dokümantasyonu Burada Alex Young'ın cevabında verilen bir Python örneği var: –

+0

Linke bağladığınız belgeler, en fazla 60 saniyelik bir süreyi içermiyor. Bu sınırlama kullanımdan kaldırıldı mı? – conradlee

-1

Bu kısa görünüyor ama GAE üzerinde bir istek zaman aşımı yaklaşık 30 saniye olduğunu bilmek zorunda. Muhtemelen urlfetch'inizin cevabı ile ilgili bazı işlemler yapmanız gerektiğinden, sanırım 10 saniyeden fazla zaman aşımına gerek yok.

27

Bu, bir Python sorusu olduğu için, bu soruna rastlayan herkes için bir Python yanıtı sağlayacağımı düşündüm.

Sadece urlfetch içe ve sonra kodunuzda başka bir şey yapmadan önce bir süre tanımlayın: Go için, kodunun altına denemek isteyebilirsiniz

from google.appengine.api import urlfetch 

urlfetch.set_default_fetch_deadline(60) 
+0

[Sürüm 1.5.3] 'e eklendi (http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes#Version_1.5.3_-_August_17,_2011) –

7

.

// 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, 
     }, 
    } 
} 

İşte nasıl kullanılır.

// urlfetch 
client := createClient(c, time.Second*60) 
+0

Bu yorumun 2013'ten geldiğini biliyorum ancak API değişti ve urlfetch, Transport artık bir Son Tarih'e sahip değil Son tarihi ayarlamak için aşağıdakileri kullanarak bağlamda ayarlayın: 'ctx, _: = context.WithDeadline (context, time.Second * 60)'. Bu yaklaşımdaki sorun, o sonraki tüm talepler için mevcut zamanı sınırlar. Demek istediğim, bir görevde (10 dakikalık zaman aşımına sahip olan) 60 dakikalık bir süre içinde büyük sorguları seçerseniz ve son tarihi 60 saniyeye ayarladığınızda, son tarihin ayarlanan bağlamda ayarlandığı tarihten itibaren 60 saniye olarak sınırlandırılırsınız. istemci BigQuery'ye geçti. – gabrielf

İlgili konular