批量入队Google Cloud Tasks

时间:2019-11-21 22:39:21

标签: google-app-engine google-cloud-platform google-cloud-tasks

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

在任务队列库中,我一次最多可以入队100个任务

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

以及异步排队任务。

在新库和新API中,您一次只能使一个任务入队

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

2 个答案:

答案 0 :(得分:0)

为了重新创建批处理拉取机制,您将不得不切换到Pub / Sub。云任务没有拉入队列。使用发布/订阅,您可以batch pushbatch pull消息。

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

答案 1 :(得分:0)

根据官方文档(reference 1reference 2),异步将任务添加到队列中的功能(如this帖子中建议将大量任务添加到队列中)是通过Cloud Tasks API 可用功能。尽管users of App Engine SDK可用。

但是,文档中有reference,涉及通过两次注入模式变通方法将大量Cloud Tasks添加到队列中(this post似乎也很有用)。

  

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

     
      
  • 请注意,为避免任何(队列/目标)重载,建议使用 500/50/5模式将任务添加到队列
  •   

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

由于您正在进行迁移,因此我发现this link很有用,因为它涉及从任务队列迁移到云任务(正如您所说的那样)。

有关将代码与所有可用详细信息一起迁移的其他信息,您可以找到herehere,分别与将队列放入Cloud Pub / Sub迁移和将队列放入Cloud Tasks迁移有关。