¿Cómo configurar el tiempo de espera para urlfetch en Google App Engine?

Estoy intentando que Django (en la parte superior de GAE) obtenga datos de otro servicio web. A menudo me golpea con un error como este:

Error de aplicación: 2 Tiempo de espera agotado

Método: GET

URL de solicitud: http: // localhost: 8080 /

Tipo de excepción: DownloadError

Valor de excepción: Error de aplicación: 2 agotado el tiempo de espera

Ubicación de excepción: /google_appengine/google/appengine/api/urlfetch.py ​​en _get_fetch_result, línea 325

Se siente como si se fuera el tiempo de espera solo después de 12 segundos (no estoy seguro, pero es realmente corto).

Pregunta: ¿Cómo puedo establecer un tiempo de espera más largo?

Related of "¿Cómo configurar el tiempo de espera para urlfetch en Google App Engine?"

Puede configurarlo utilizando el argumento de deadline de la función de búsqueda . De los documentos :

La fecha límite puede ser de hasta 60 segundos como máximo para los manejadores de solicitudes y de 10 minutos para la cola de tareas y los manejadores de trabajos cron. Si la fecha límite es Ninguna, la fecha límite se establece en 5 segundos.


Edición: parece que esto ha cambiado ahora. Desde aqui

Puede establecer una fecha límite para una solicitud, la mayor cantidad de tiempo que el servicio esperará una respuesta. De forma predeterminada, la fecha límite para una recuperación es de 5 segundos. Puede ajustar el plazo predeterminado para solicitudes utilizando la función urlfetch.set_default_fetch_deadline() .

Y esta página enumera los valores de tiempo de espera predeterminados:

Actualmente, hay varios errores llamados DeadlineExceededError para el tiempo de ejecución de Python:

  • google.appengine.runtime.DeadlineExceededError : se google.appengine.runtime.DeadlineExceededError si la solicitud general se agota, generalmente después de 60 segundos, o 10 minutos para las solicitudes de cola de tareas.
  • google.appengine.runtime.apiproxy_errors.DeadlineExceededError : se google.appengine.runtime.apiproxy_errors.DeadlineExceededError si un RPC supera su fecha límite. Esto suele durar 5 segundos, pero es configurable para algunas API utilizando la opción ‘fecha límite’.
  • google.appengine.api.urlfetch_errors.DeadlineExceededError : se google.appengine.api.urlfetch_errors.DeadlineExceededError si el URLFetch se agota.

Viendo que esta es una pregunta de Python , pensé que le daría una respuesta de Python a cualquiera que se encuentre con este problema.

Solo importa urlfetch y luego define una fecha límite antes de hacer cualquier otra cosa en tu código:

 from google.appengine.api import urlfetch urlfetch.set_default_fetch_deadline(60) 

Para Go, es posible que desee probar a continuación el código.

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

Aquí es cómo usarlo.

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

Parece corto, pero hay que saber que el tiempo de espera de una solicitud en GAE es de unos 30 segundos. Como probablemente deba realizar algunas operaciones en la respuesta de su urlfetch, creo que no hay necesidad de tener un tiempo de espera de más de 10 segundos.