【问题标题】:Error using deferred.defer on App Engine在 App Engine 上使用 deferred.defer 时出错
【发布时间】:2018-05-08 01:31:30
【问题描述】:

我正在尝试按照以下示例在 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 应用无法找到 Google 模块。

【问题讨论】:

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


    【解决方案1】:

    deferred 库很久以前就建立在推送任务队列之上,当时还没有柔性环境或其托管 VM 的前身 - 您遵循的指南实际上仅适用于标准环境。

    推送任务队列在柔性环境中的支持有限。来自Migrating Services from the Standard Environment to the Flexible EnvironmentTask Queue 部分:

    任务队列服务在 标准环境。如果您想在外部使用该服务 标准环境,您可以注册Cloud Tasks alpha

    在标准环境之外,不能给push queues添加任务,但是在柔性环境中运行的服务可以 推送任务的目标。您可以使用 target 将任务添加到队列或指定时的参数 queue.yaml中队列的默认target

    在许多情况下,您可能会使用拉取队列,例如排队 将被单独拉取和处理的任务或消息 工人,Cloud Pub/Sub 可以是一个不错的选择,因为它提供 类似的功能和交付保证。

    我不知道是否/如何使用deferred 库本身和标准环境之外的 alpha 任务队列支持——我只使用了标准环境。我只是推测您有更好的机会直接使用任务队列库(反正比deferred 库更灵活,限制更少)。

    如果您选择其中任何一种方式,那么您将进入一个相当未知的领域,YMMV。祝你好运!

    另一个选项可能是检查 pub/sub 替代方案是否适合您尝试使用 deferred 库实现的目标。无法评论,我还没用过。

    【讨论】:

    • 谢谢你的答案。我很失望在 App Engine 上运行 Python 3 意味着要接受如此多的限制。
    • 我用另一种可能的替代方法更新了答案,也许它会有所帮助。
    • 再次感谢。我会检查一下,CRON 可能也可以。我会调查的。
    猜你喜欢
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2014-03-11
    • 2019-04-02
    • 1970-01-01
    相关资源
    最近更新 更多