本页面介绍如何将 Deferred API(一种旧版捆绑服务)与标准环境中的 Python 3 运行时搭配使用。您的应用可以通过 Python 3 版 App Engine 服务 SDK 访问捆绑服务。
概览
延迟软件包 google.appengine.ext.deferred
过去依赖于 Python 2 中的 webapp 框架。由于 Python 3 版 App Engine 服务 SDK 中已移除 webapp 框架,因此在将 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 中相同的网址 /_ah/queue/deferred
和默认队列。请注意,对于迁移到 Cloud Tasks 的应用,系统不会自动创建默认队列,并且延迟任务库不可用。
如果您的应用使用默认的 /_ah/queue/deferred
端点,则使用 Python 3 中的 deferred.defer()
与使用 Python 2 的效果相同。如果您的应用使用自定义网址来执行延迟任务,则需要进行一些更改,因为 Python 2 的 deferred
模块中的 TaskHandler
类已从此 API 的 Python 3 版本中移除了。
如需为执行延迟任务设置自定义网址,应用可替换 deferred.Handler
类中的 post
或 run_from_request
方法(先前在 Python 2 中称为 deferred.TaskHandler
),并传递 environ
参数,该参数表示包含 WSGI 请求参数的字典。然后,可以从自定义端点调用 post
方法(如 Python 3 示例所示)。
Python 3 Deferred API 的端到端使用情况(例如请求路由和访问 environ
字典)取决于应用要迁移到的 Web 框架。比较以下几个部分中 Python 2 示例与 Python 3 示例的代码更改。
Python 3 示例
以下示例展示了如何在 Flask 应用和 Django 应用中使用默认端点和自定义端点执行延迟任务。
Flask
Django
没有任何框架
代码示例
如需查看本指南中的完整代码示例,请参阅 GitHub。