gpt4 book ai didi

python - "Fork and Join"无服务器功能(例如 AWS Lambda)/Python

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:32 26 4
gpt4 key购买 nike

我正在使用 AWS Lambda ( https://registry.opendata.aws/sentinel-2/) 处理相对较大的图像。

为了处理这些图像,我将它们分成更小的图像(约 1500 个“碎片”),这些图像可以独立处理(碎片的数量根据源图像的内容不可预测地变化)。使用 Lambda 的多次调用并行处理芯片,该 Lambda 接受几百个芯片的“页面”。

这就是我遇到的问题:处理完所有页面后,我需要将结果组合成单个输出图像,但如何知道所有页面(“可变批处理调用”)何时完成?

我考虑过例如将进度信息写入 s3 或 dynamo 并在每一页之后调用组合函数,以便只有该函数的最后一次调用继续进行(当进度检查返回完成时)。我见过 future / promise 之类的选项,但是一页筹码的处理时间约为 10-15 分钟,所以我不想保留等待 future / promise 完成的“ Controller ”功能,因为此时进行多次调用的成本更低。

写出进度信息并多次检查是否有更好的解决方案?

(注意我看过这个问题:Fork and Join with Amazon Lambda)

最佳答案

您可以使用 Amazon SQS 将芯片添加到队列中,然后让工作人员或 Lambda 将这些单独的作业从队列中拉出。然后,您可以设置一个 cloudwatch 警报设置来监控您的队列深度,其中队列深度为零(作业已完成)会触发“完成”Lambda,它将各个输出芯片重新组合在一起。

我相信 CloudWatch 会每隔 5 分钟提醒一次轮询队列状态,因此对于处理时间较长(约 10-15 分钟)的用例,它不会成为瓶颈(无论如何 Lambda 超时为 15 分钟,因此如果您设置在 15 分钟进行轮询,则您的 Lambda 要么失败要么将在那时完成)。

一步一步,这会是什么样子:

  1. 上传新文件到S3
  2. 上传触发 lambda 将文件分解为新文件夹中的“碎片”
  3. 将所有筹码添加到新队列
  4. Lambda 将筹码移出队列
  5. 当队列为空时,触发聚合lambda

这是另一个关于根据队列状态设置触发器的有用答案:Efficient way to check whether SQS queue is empty

关于python - "Fork and Join"无服务器功能(例如 AWS Lambda)/Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55227785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com