在App Engine上使用deferred.defer时出错

时间:2018-05-08 01:31:30

标签: python python-3.x google-app-engine

我正在尝试在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应用程序无法找到谷歌模块。

1 个答案:

答案 0 :(得分:2)

deferred库是很久以前在推送任务队列之上构建的,当时灵活环境或其管理虚拟机的前身都不存在 - 您所遵循的指南实际上仅适用于标准环境。

推送任务队列在灵活环境中的支持有限。来自Task QueueMigrating 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库实现的目标。不能评论它,所以,我还没有使用它。