0

我正在使用 App Engine 根据列表中的项目触发多个 Cloud Tasks 的创建:

function_url="https://us-central1-myproject.cloudfunctions.net/some-cloud-function"

someTasks = [
{'id': 'task-1'},
{'id': 'task-2'},
{'id': 'task-3'},
...
{'id': 'task-1000'},
]

当前使用以下命令创建任务:

Parallel(backend='threading', n_jobs=100)(
        delayed(create_document_task)(function_url=function_uri, data=task) for task in someTasks 
                    )

上面的代码并行创建任务并指示任务队列将有效负载定向到该特定云功能。

并行执行此操作是快速创建任务的正确方法吗?

4

1 回答 1

1
- I am posting this as an answer, due to the amount of text not fitting in a comment.

似乎前面提到的(在评论中)方法:

  • 队列(“someQueue”).add_async(任务)

确实是老方法。此方法在任务队列 REST API (v1)中实现,以便将任务或任务列表异步添加到任务队列中。

但是,如此处所述,App Engine 任务队列 REST API (v1) 已于 2018 年 2 月 20 日被拒绝。单独的产品 Cloud Tasks 提供了一个REST API,您可以使用该 API 从第二代 App Engine 标准环境添加任务运行时、任何 App Engine 柔性环境运行时,甚至完全来自 App Engine 之外。

此 API 不包含“add_async()”功能。更具体地说,这里这里确认了异步添加任务到队列的功能,因为App Engine SDK 的用户可以选择这样做,这不是通过 Cloud Tasks API 提供的功能。

尽管如此,当需要添加大量云任务(例如数百万或数十亿)时,双注入模式可能会很有用

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

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

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

我希望这有帮助。

于 2019-11-27T13:04:52.620 回答