1

作为将我的 Google App Engine 标准项目从 python2 迁移到 python3 的一部分,看起来我还需要从使用 Taskqueue API 和库切换到 google-cloud-tasks。

在任务队列库中,我可以像这样一次将多达 100 个任务排入队列

taskqueue.Queue('default').add([...task objects...])

以及异步排队任务。

在新库和新 API 中,您似乎一次只能将任务排入队列

我有一个端点,它接收包含数千个元素的批次,每个元素都需要在单个任务中处理。我该怎么办?

4

2 回答 2

2

根据官方文档(参考文献 1参考文献 2),异步添加任务到队列的功能(正如这篇文章建议将大量任务添加到队列中),不是通过 Cloud Tasks API 提供的功能。不过,它可供App Engine SDK 的用户使用

但是,文档中有一个关于通过双注入模式解决方法将大量云任务添加到队列的参考(这篇文章似乎也很有用)。

要实现此场景,您需要创建一个新的注入器队列,其单个任务将包含添加您正在使用的原始队列的多个 (100) 任务的信息。在这个注入器队列的接收端将是一个服务,它将预期的任务实际添加到您的原始队列中。尽管此服务中的任务添加将是同步的和一对一的,但它会为您的主应用程序提供一个异步接口来批量添加任务。通过这种方式,您可以克服在主应用程序中同步、一对一任务添加的限制。

  • 请注意,将任务添加到队列的 500/50/5 模式是一种建议方法,以避免任何(队列/目标)过载。

由于我没有找到此实现的任何示例,因此我将在找到答案后立即编辑答案。

由于您处于迁移过程中,我发现此链接将很有用,因为它涉及从任务队列迁移到云任务(正如您所说的那样)。

有关迁移代码的其他信息以及您可以在此处此处找到的所有可用详细信息,关于将队列拉到 Cloud Pub/Sub 迁移和将队列相应地推送到 Cloud Tasks 迁移。

于 2019-11-27T14:43:57.050 回答
-1

为了重新创建批量提取机制,您必须切换到 Pub/Sub。Cloud Tasks 没有拉取队列。使用 Pub/Sub,您可以批量推送批量拉取消息。

如果您使用的是推送队列架构,我建议您将这些元素作为任务负载传递;但是最大任务大小限制为100kb

于 2019-11-22T16:25:43.817 回答