nodejs google engine deploy bootstrap app python django google-app-engine timeout

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



google app engine python (4)

Estoy tratando de 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?


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 breve, pero hay que saber que el tiempo de espera de una solicitud en GAE es de alrededor de 30 segundos. Como es probable que necesite realizar algunas operaciones en la respuesta de su urlfetch, creo que no es necesario tener un tiempo de espera de más de 10 segundos.


Viendo que esta es una pregunta de Python , pensé que 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)


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

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 la fecha límite predeterminada 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 ser de 5 segundos, pero se puede configurar 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.