1

Google App Engine 中任务队列上的作业是否会自动放在默认后端,或者它们是否被安排在调用它们的代码的后端版本上?

假设我有两个后端,一个称为“测试”,一个称为“生产”,其中“生产”是我的默认版本。

在他们每个人中,我都有一个简单化的文件,如下所示:

from google.appengine.api import taskqueue
import webapp2

class QueueScheduler(webapp2.RequestHandler):
    def get(self): #in real life, post, but this makes for an easier example
        taskqueue.add('path/to/myTask')

app = webapp2.WSGIApplication(('/myScheduler',QueueScheduler))

当我打电话给 时test.myApp.appspot.com/myScheduler,我将创建指向的任务test.myApp.appspot.com/path/to/myTask还是将创建一个任务myApp.appspot.com/path/to/myTask(即production.myApp.appspot.com/path/to/myTask

有没有办法让我从代码中控制它?假设我有第三个后端,称为“队列”。有什么方法可以更改上面的代码,以便调用test.myAppp.appspot.com/myScheduler,production.myApp.appspot.com/mySchedulerqueues.myApp.appspot.com/mySchedulerall 会生成一个任务来调用 go to 到达的代码,queues.myApp.appspot.com/path/to/myTask同时保持“生产”作为默认后端版本?

meta:如果重要的话,我正在处理的特殊问题是我的公司为我们的移动应用程序使用的代码版本与我们为 Web 应用程序使用的代码版本不同。我们将版本号硬编码到我们的应用程序中,以使应用程序指向我们发布更新时的默认版本,以便我们可以进行向后不兼容的修订。我们也经常希望在更新用户看到的界面之前更新我们的数据处理。我正在寻找一种解决方案,使我们能够做到这一点,而不必确保在我们部分完成对接口的更改或同时处理代码的多个分支时不会修改数据处理。我们' 希望调用我们应用程序的默认版本和旧版本,以便能够在尚未准备好面向客户端的版本上完成数据处理。在 cron.yaml 中创建任务并在那里设置版本解决了我们必须保持活动的所有数据的问题,但对于某些事情,我们宁愿在多个分支中开发的编程开销也不愿不保持的问题数据实时。

4

2 回答 2

3

这个 add 函数的文档实际上对这个确切的主题有更好的处理。

https://developers.google.com/appengine/docs/python/taskqueue/functions#add

target参数允许您控制使用的版本,因此您可以在代码中设置一次,并将其应用于您部署的所有版本,这正是我问这个问题时所寻找的。

简而言之,默认情况下,任务在启动任务的 url 所在的后端运行,但可以通过代码控制任务队列在哪个版本的应用程序上运行。为此,只需调用taskqueue.add('/relative/path/to/task',target='queues')

于 2013-08-16T17:34:24.367 回答
-3

你的答案几乎在这里:

https://developers.google.com/appengine/docs/python/taskqueue/?hl=en#Python_Tasks_and_app_versions

于 2013-08-14T00:15:55.413 回答