【问题标题】:Run continuous python script on GCP在 GCP 上运行连续的 python 脚本
【发布时间】:2024-01-23 01:46:01
【问题描述】:

我正在从 API 中提取天气数据。我编写了一个脚本,每 15 分钟获取一次数据。在 google 的应用引擎上运行此脚本的最佳做法是什么?

  • Appengine python 应用?
  • Cron 作业?
  • 在 VM 中运行脚本?

【问题讨论】:

    标签: google-app-engine cron virtual-machine


    【解决方案1】:

    假设您不想用另一种语言(例如 JavaScript,这将允许 Cloud Functions 或 Google Apps 脚本)重写您的脚本,那么问题是您实际上想要对获取的数据做什么,并且如果您已经使用App Engine 应用或虚拟机。

    您可以在 Python 标准环境中使用 App Engine 应用来实现此功能。基本上你会编写一个请求处理程序来获取数据并将 cron.yaml 配置为schedule a cron-job。因此,您的请求处理程序将根据您的计划接收 HTTP 请求,然后执行 Outbound Requestfetch()。有关限制(例如端口限制),请参阅文档。对于此设置,我还建议配置task-queue,以便在任何时候只处理一个请求,并在请求失败时添加(指数?)回退。还要记住,实例之前的默认idle_timeoutshutdown is 5 minutes (for "basic scaling")。 15 分钟是startup fee that is billed for a new instance。由于 cron-jobs 并不完全以每秒为基础运行,而是在预定时间周围略微分布,这可能会导致额外的成本,具体取决于您的配置。因此,将基本扩展配置中的 idle_timeout 增加到 16 或 17 分钟,或者每 13.5 分钟左右安排一次任务可能是有意义的。

    如果fetch() 限制不能满足您的要求,您可能需要考虑灵活的环境或虚拟机。

    【讨论】:

      【解决方案2】:

      我已经完全按照您过去的要求完成了,提取天气数据(可能来自 .gov 来源),然后对其进行一些处理并将其存储在数据库中。

      我开始使用 python/cron 组合,但在跟踪失败时失败的部分时遇到了问题。很多时候,应该可用的数据却没有。

      就我而言,我在 AWS,所以我使用 Lambda,但 Google Cloud Platform 的 Cloud Functions 是类似的。我使用 Jenkins 的预定触发器启动了各个功能,然后跟踪它们的完成情况以确保它成功完成。如果函数失败,那么我可以在 Jenkins 中看到该过程的哪个特定部分很容易失败。

      【讨论】:

      最近更新 更多