将任务队列与新的GAE模块一起使用

时间:2014-01-11 15:59:45

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

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

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

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

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

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:2)

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

- name: solver_queue
  ...
  target: solver_backend

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

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

答案 1 :(得分:0)

  

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

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

因此

  

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

是一种正确的行为。