【问题标题】:Using Task Queues with the new GAE Modules将任务队列与新的 GAE 模块一起使用
【发布时间】:2014-01-11 15:59:44
【问题描述】:

我有一个 GAE 应用程序,它有一个描述请求处理程序的 app.yaml,并使用延迟扩展将任务放到推送队列中,该队列针对也在我的应用程序中定义的后端。

但是,我在 GAE 仪表板中看到通知说“您正在使用后端,您应该查看模块”。因此,我查看了模块,但在弄清楚如何将后端定义为模块时遇到了一些困难。我的后端不需要任何明确定义的请求处理程序。它只处理队列中的任务。但是当我为没有处理程序的后端创建模块 yaml 文件时,开发服务器抱怨它是一个无效文件。

我尝试使用 backend_conversion.py 文件并将请求处理程序从我的默认模块复制到我的后端模块中,这似乎有效,但感觉不对。

项目源码可以找到here,模块转换的分支是here

任何建议将不胜感激。

【问题讨论】:

  • 您必须添加一个包含一些内容的处理程序部分 - 我想在模块存在之前检查是有意义的,但现在没有那么多了。

标签: python google-app-engine module task-queue gae-module


【解决方案1】:

您可以将指令target 设置为queue.yaml 中的队列定义:

- name: solver_queue
  ...
  target: solver_backend

并将参数_queue添加到deferred.defer:

deferred.defer(function, param1, param2, _queue='solver_queue')

【讨论】:

  • 感谢您的提示。我已经在使用 _queue 参数,但我也在 defer 调用中使用了 _target 来定位solverbackend。我更喜欢像你描述的那样在 queue.yaml 文件中设置它。
【解决方案2】:

我的后端不需要任何明确定义的请求处理程序。它只处理队列中的任务。

您可能觉得backend_conversion.py 错误的原因是因为它复制了您的处理程序,并且您觉得您的后端以前不需要处理程序。但是后端需要处理程序作为前端实例。您的后端实际上所做的是在后端实例上运行您的整个应用程序(由app.yaml 定义)。因此,您的前端实例和后端实例实际上之前共享相同的代码。

因此

backend_conversion.py 文件并复制请求处理程序

是正确的行为。

【讨论】:

  • 当然,我想我可以理解为什么作为默认转换是有意义的。但是,为什么我不能编辑该定义并删除处理程序而不会出错?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多