超时时间长的无服务器 python 请求?
Serverless python requests with long timeouts?
我有几个遵循类似格式的 python 脚本:您传入一个日期,它会: - 检查我的 S3 存储桶中是否有文件名中包含该日期的文件,并解析它或- 运行 python 脚本对该日期的文件进行一些分析(需要 1 小时到 运行)
我正在寻找一种无服务器解决方案,可以让我在一定日期范围内调用这些函数,并且 运行 它们全部并行。由于我的 python 脚本持续时间较长,AWS 和 Google Cloud Functions 等服务会因为超时(分别为 15 分钟和 9 分钟)而无法运行。我查看了 Google Cloud Dataflow,但我不确定这对于我相对简单的用例来说是否过大。
尽可能少的中断很重要,所以我倾向于 AWS、Google 云等
我还希望能够看到带有日志的每个作业进度的仪表板,这样我就可以看到哪些日期已经完成,哪些日期有错误(以及错误是什么)
Cloud 运行 路线图中计划了较长的 运行ning 持续时间,但我们目前没有日期。
今天推荐的最佳方式是use AppEngine in addition of Task Queue. With push queue, you can run process up to 24H long when you deploy in manual scaling mode。但请注意,手动缩放不会缩放到 0!
如果您更喜欢容器,我知道 GCP 上的 2 "strange" 解决方法:
- 使用云构建。 Cloud Build 让您 build custom builder in a container. Do whatever you want in this container, even if it's not for building something. Think to set up the correct timeout for your processing step。您每天有 120 分钟免费使用 Cloud Build(在整个组织内共享,这不是每个项目的免费套餐!)。您可以 运行 最多并行构建 10 个作业。
- 使用 AI Platform 训练。与 Cloud Build 类似,AI Platform training allows you to run a custom container for performing processing,最初考虑进行培训。但是,它是一个容器,你可以 运行 在里面放任何你想要的东西。这里没有免费套餐。您被限制为 20 CPU 并行,但您可以要求将限制增加到 450 个并发 vCPU.
遗憾的是,它不像函数或云 运行 那样容易使用。您没有 HTTP 端点,您只需使用您想要和享受的日期来调用它。但您可以将其封装到一个函数中,该函数执行 API 对 Cloud Build 或 AI Platform 训练的调用。
如您所说,使用 Google Cloud Functions,您可以在部署期间将超时配置为最多 9 分钟。
与允许更高超时的 Dataflow 不同的解决方案:
App 引擎 Flex
其他允许更高超时(最多 60 分钟)的 GCP 产品是 App Engine Flex 环境 link。
云任务
云任务也类似,但是是异步的。超时最多 30 分钟。它是一个任务队列,你把任务放到队列里然后returns很快。然后,队列的工作人员(或多个工作人员)将对任务进行一项一项的评估。
Cloud Tasks 的通常输出是发送电子邮件或将结果保存到 Storage link.
使用此解决方案,您可以为每个 file/filename 添加一个任务来处理,并且每个任务都有 30 分钟的超时。
我有几个遵循类似格式的 python 脚本:您传入一个日期,它会: - 检查我的 S3 存储桶中是否有文件名中包含该日期的文件,并解析它或- 运行 python 脚本对该日期的文件进行一些分析(需要 1 小时到 运行)
我正在寻找一种无服务器解决方案,可以让我在一定日期范围内调用这些函数,并且 运行 它们全部并行。由于我的 python 脚本持续时间较长,AWS 和 Google Cloud Functions 等服务会因为超时(分别为 15 分钟和 9 分钟)而无法运行。我查看了 Google Cloud Dataflow,但我不确定这对于我相对简单的用例来说是否过大。
尽可能少的中断很重要,所以我倾向于 AWS、Google 云等
我还希望能够看到带有日志的每个作业进度的仪表板,这样我就可以看到哪些日期已经完成,哪些日期有错误(以及错误是什么)
Cloud 运行 路线图中计划了较长的 运行ning 持续时间,但我们目前没有日期。
今天推荐的最佳方式是use AppEngine in addition of Task Queue. With push queue, you can run process up to 24H long when you deploy in manual scaling mode。但请注意,手动缩放不会缩放到 0!
如果您更喜欢容器,我知道 GCP 上的 2 "strange" 解决方法:
- 使用云构建。 Cloud Build 让您 build custom builder in a container. Do whatever you want in this container, even if it's not for building something. Think to set up the correct timeout for your processing step。您每天有 120 分钟免费使用 Cloud Build(在整个组织内共享,这不是每个项目的免费套餐!)。您可以 运行 最多并行构建 10 个作业。
- 使用 AI Platform 训练。与 Cloud Build 类似,AI Platform training allows you to run a custom container for performing processing,最初考虑进行培训。但是,它是一个容器,你可以 运行 在里面放任何你想要的东西。这里没有免费套餐。您被限制为 20 CPU 并行,但您可以要求将限制增加到 450 个并发 vCPU.
遗憾的是,它不像函数或云 运行 那样容易使用。您没有 HTTP 端点,您只需使用您想要和享受的日期来调用它。但您可以将其封装到一个函数中,该函数执行 API 对 Cloud Build 或 AI Platform 训练的调用。
如您所说,使用 Google Cloud Functions,您可以在部署期间将超时配置为最多 9 分钟。
与允许更高超时的 Dataflow 不同的解决方案:
App 引擎 Flex
其他允许更高超时(最多 60 分钟)的 GCP 产品是 App Engine Flex 环境 link。
云任务
云任务也类似,但是是异步的。超时最多 30 分钟。它是一个任务队列,你把任务放到队列里然后returns很快。然后,队列的工作人员(或多个工作人员)将对任务进行一项一项的评估。 Cloud Tasks 的通常输出是发送电子邮件或将结果保存到 Storage link.
使用此解决方案,您可以为每个 file/filename 添加一个任务来处理,并且每个任务都有 30 分钟的超时。