Questa pagina descrive come utilizzare l'API Deferred, uno dei servizi legacy in bundle, con il runtime Python 3 per l'ambiente standard. L'app può accedere ai servizi in bundle tramite l'SDK per i servizi App Engine per Python 3.
Panoramica
In precedenza, il pacchetto Deferred google.appengine.ext.deferred
dipendeva dal webapp framework in Python 2. Poiché il webapp framework è stato rimosso nell'SDK dei servizi App Engine per Python 3, devi apportare alcune modifiche durante l'upgrade dell'app Python 2 a Python 3.
Attivazione dell'API Deferred
Per attivare l'API Deferred per Python 3, non è più necessario impostare
builtins.deferred
su on
nel file app.yaml
. Per attivare l'API, devi invece passare use_deferred=True
nella chiamata a wrap_wsgi_app()
.
Somiglianze e differenze
Per impostazione predefinita, l'API Deferred per Python 3 utilizza lo stesso URL /_ah/queue/deferred
e la stessa coda predefinita
di Python 2. Tieni presente che per le app di cui viene eseguita la migrazione a Cloud Tasks, la coda predefinita non viene creata automaticamente e la libreria delle attività differite non è disponibile.
Se la tua app utilizza l'endpoint /_ah/queue/deferred
predefinito, l'utilizzo di
deferred.defer()
in Python 3 rimane invariato rispetto a
Python 2.
Se la tua app utilizza un URL personalizzato per l'esecuzione di attività differite, devi apportare alcune modifiche poiché la classe TaskHandler
nel modulo deferred
per Python 2 è stata rimossa nella versione Python 3 di questa API.
Per impostare un URL personalizzato per l'esecuzione di attività differite, l'app può eseguire l'override del metodo post
o run_from_request
nella classe deferred.Handler
(in precedenza deferred.TaskHandler
in Python 2) e passare il parametro environ
che rappresenta un dizionario contenente i parametri di richiesta WSGI. Il metodo post
può quindi essere chiamato dall'endpoint personalizzato (come mostrato negli esempi di Python 3).
L'utilizzo end-to-end dell'API Deferred di Python 3, ad esempio il routing delle richieste e l'accesso al dizionario environ
, dipende dal framework web a cui viene eseguita la migrazione dell'app. Confronta le modifiche al codice apportate dall'esempio di Python 2 a quelle di Python 3 nelle sezioni seguenti.
Esempi di Python 3
L'esempio seguente mostra come eseguire un'attività differita utilizzando un endpoint predefinito e un endpoint personalizzato in un'app Flask e in un'app Django.
Flask
Django
Senza alcun framework
Esempi di codice
Per visualizzare gli esempi di codice completi di questa guida, consulta GitHub.