我正在尝试在App Engine上使用deferred.defer(灵活),例如:https://cloud.google.com/appengine/articles/deferred
这是一个Python3应用程序。正如教程所说,我将这些行添加到app.yaml:
- url: /_ah/queue/deferred
script: google.appengine.ext.deferred.deferred.application
login: admin
builtins:
- deferred: on
部署应用程序时,出现错误:
from google.appengine.ext import deferred
ModuleNotFoundError: No module named 'google.appengine'
我很困惑,因为我不明白为什么App Engine应用程序无法找到谷歌模块。
答案 0 :(得分:2)
deferred
库是很久以前在推送任务队列之上构建的,当时灵活环境或其管理虚拟机的前身都不存在 - 您所遵循的指南实际上仅适用于标准环境。
推送任务队列在灵活环境中的支持有限。来自Task Queue的Migrating Services from the Standard Environment to the Flexible Environment部分:
任务队列服务的可用性有限 标准环境。如果你想使用以外的服务 在标准环境中,您可以注册Cloud Tasks alpha。
在标准环境之外,您无法向push queues添加任务,但在灵活环境中运行的服务可以是 推送任务的目标。您可以使用 将任务添加到队列或通过指定时的
中队列的默认target
参数queue.yaml
target
在许多情况下,您可能会使用拉取队列,例如排队 将被单独提取和处理的任务或消息 工人,Cloud Pub/Sub可以提供一个很好的选择 类似的功能和交付保证。
我不知道是否/如何使用deferred
库本身以及标准环境之外的alpha任务队列支持 - 我只使用标准环境。我只是推测你有更好的机会直接使用任务队列库(比deferred
库更灵活,限制更少)。
如果您选择其中任何一种方式,那么您将处于相当未知的领域,YMMV。祝你好运!
另一个选项可能是检查pub / sub替代方案是否适合您使用deferred
库实现的目标。不能评论它,所以,我还没有使用它。