このページでは、以前のバンドル サービスの一つである Deferred API を、スタンダード環境の Python 3 ランタイムとともに使用する方法を説明します。アプリを使用すると Python 3 用 App Engine サービス SDK を介してバンドル サービスにアクセスできます。
概要
これまで遅延パッケージ google.appengine.ext.deferred は Python 2 の webapp フレームワークに依存していました。webapp フレームワークは Python 3 用 App Engine サービス SDK から削除されたため、Python 2 アプリを Python 3 にアップグレードする際にはいくつかの変更が必要になります。
Deferred API を有効にする
Python 3 用 Deferred API を有効にする際、app.yaml ファイル内で builtins.deferred を on に設定する必要がなくなりました。API を有効にするには、wrap_wsgi_app() の呼び出しで use_deferred=True を渡す必要があります。
類似点と相違点
デフォルトでは、Python 3 用 Deferred API は Python 2 と同じ URL(/_ah/queue/deferred)と同じデフォルト キューを使用します。なお、Cloud Tasks に移行するアプリの場合、デフォルト キューが自動的に作成されないため、遅延タスク ライブラリは使用できません。
アプリでデフォルトの /_ah/queue/deferred エンドポイントを使用する場合、Python 3 での deferred.defer() の使用は、Python 2 の場合と同じになります。アプリでカスタム URL を遅延タスクの実行に使用する場合、Python 2 の deferred モジュール内の TaskHandler クラスがこの API の Python 3 バージョンで削除されているため、いくつかの変更が必要になります。
遅延タスクの実行用にカスタム URL を設定するには、アプリで deferred.Handler クラス(Python 2 における以前の deferred.TaskHandler)内の post メソッドまたは run_from_request メソッドを上書きして、WSGI リクエスト パラメータを含むディクショナリを表す environ パラメータを渡します。これにより、post メソッドをカスタム エンドポイントから呼び出すことができます(Python 3 のサンプルを参照)。
リクエストのルーティングや environ ディクショナリへのアクセスなど、Python 3 Deferred API のエンドツーエンドの使用法は、アプリが移行するウェブ フレームワークによって異なります。次のセクションでは、Python 2 のサンプルと Python 3 のサンプルで行われたコードの変更を比較します。
Python 3 の例
次のサンプルでは、Flask アプリと Django アプリでデフォルトのエンドポイントとカスタム エンドポイントを使用して遅延タスクを実行する方法を示しています。
Flask
Django
フレームワークなし
コードサンプル
このガイドの完全なコードサンプルについては、GitHub をご覧ください。