En esta página, se describe cómo usar la API de Deferred, uno de los servicios agrupados en paquetes heredados, con el entorno de ejecución de Python 3 para el entorno estándar. Tu aplicación puede acceder a los servicios en paquetes a través del SDK de servicios de App Engine para Python 3.
Descripción general
Antes, el paquete diferido google.appengine.ext.deferred dependía del marco de trabajo de aplicaciones web en Python 2. Dado que el marco de trabajo de aplicaciones web se quitó en el SDK de servicios de App Engine para Python 3, debes realizar algunos cambios cuando actualices tu app de Python 2 a Python 3.
Habilita la API diferida
A fin de habilitar la API diferida para Python 3, ya no necesitas configurar builtins.deferred como on en el archivo app.yaml. En su lugar, para habilitar la API, debes pasar use_deferred=True en la llamada a wrap_wsgi_app().
Similitudes y diferencias
De forma predeterminada, la API diferida para Python 3 usa la misma URL /_ah/queue/deferred y la misma cola predeterminada que usó en Python 2. Ten en cuenta que para las aplicaciones que migran a Cloud Tasks, la cola predeterminada no se creó automáticamente y la biblioteca de tareas diferidas no está disponible.
Si tu app usa el extremo /_ah/queue/deferred predeterminado, el uso de deferred.defer() en Python 3 permanece igual que el de Python 2.
Si la app usa una URL personalizada para la ejecución de tareas diferidas, debes realizar algunos cambios, ya que se quitó la clase TaskHandler del módulo deferred de Python 2 en la versión de Python 3 de esta API.
A fin de establecer una URL personalizada para la ejecución de tareas diferidas, la app puede anular el método post o run_from_request en la clase deferred.Handler (antes deferred.TaskHandler en Python 2) y pasar el parámetro environ, que representa un diccionario que contiene parámetros de solicitud WSGI. Luego, se puede llamar al método post desde el extremo personalizado (como se muestra en las muestras de Python 3).
El uso de extremo a extremo de la API diferida de Python 3, como el enrutamiento de solicitudes y el acceso al diccionario environ, depende del framework web al que migra la app. Compara los cambios de código realizados del ejemplo de Python 2 a los ejemplos de Python 3 en las siguientes secciones.
Ejemplos de Python 3
En el siguiente ejemplo, se muestra cómo ejecutar una tarea diferida que usa un extremo predeterminado y un extremo personalizado en una aplicación de Flask y una de Django.
Flask
Django
Sin ningún framework
Muestras de código
Para ver las muestras de código completas de esta guía, consulta GitHub.