¿Es posible boost el tiempo de espera de respuesta en Google App Engine?

En mi máquina local, el script se ejecuta bien pero en la nube es 500 todo el tiempo. Esta es una tarea cron, así que realmente no me importa si toma 5min …

:

¿Alguna idea de si es posible boost el tiempo de espera?

Gracias rui

No puede ir más allá de los 30 segundos, pero puede boost indirectamente el tiempo de espera empleando colas de tareas y escribiendo tareas que se repitan gradualmente en su conjunto de datos y los procesan. Cada una de estas tareas debe, por supuesto, ajustarse al límite de tiempo de espera.

EDITAR

Para ser más específico, puede usar los cursores de consulta del almacén de datos para reanudar el procesamiento en el mismo lugar:

http://code.google.com/intl/pl/appengine/docs/python/datastore/queriesandindexes.html#Query_Cursors

Primero introducido en SDK 1.3.1:

http://googleappengine.blogspot.com/2010/02/app-engine-sdk-131-including-major.html

Las reglas exactas para los tiempos de espera de consulta de base de datos son complicadas, pero parece que una consulta no puede vivir más de aproximadamente 2 minutos, y un lote no puede vivir más de aproximadamente 30 segundos. Aquí hay un código que divide un trabajo en varias consultas, usando cursores para evitar esos tiempos de espera.

def make_query(start_cursor): query = Foo() if start_cursor: query.with_cursor(start_cursor) return query batch_size = 1000 start_cursor = None while True: query = make_query(start_cursor) results_fetched = 0 for resource in query.run(limit = batch_size): results_fetched += 1 # Do something if results_fetched == batch_size: start_cursor = query.cursor() break else: break 

A continuación se muestra el código que utilizo para resolver este problema, al dividir una única consulta grande en varias pequeñas. Utilizo la biblioteca google.appengine.ext.ndb . No sé si es necesario para que funcione el siguiente código.

(Si no está utilizando ndb, considere cambiarlo. Es una versión mejorada de la biblioteca db y migrarla es fácil. Para obtener más información, visite https://developers.google.com/appengine/docs/python/ ndb .)

 from google.appengine.datastore.datastore_query import Cursor def ProcessAll(): curs = Cursor() while True: records, curs, more = MyEntity.query().fetch_page(5000, start_cursor=curs) for record in records: # Run your custom business logic on record. RunMyBusinessLogic(record) if more and curs: # There are more records; do nothing here so we enter the # loop again above and run the query one more time. pass else: # No more records to fetch; break out of the loop and finish. break