在GCP上运行连续的python脚本

时间:2018-03-22 13:47:11

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

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

  • Appengine python app?
  • Cron工作?
  • 在VM中运行脚本吗?

2 个答案:

答案 0 :(得分:2)

假设您不想用其他语言重写脚本(例如,允许使用云功能或Google Apps脚本的JavaScript),问题就是您实际想要对获取的数据执行的操作以及是否已使用App Engine应用程序或VM。

您可以在Python标准环境中使用App Engine应用程序来实现此功能。基本上你会编写一个请求处理程序,它将获取数据并将cron.yaml配置为schedule a cron-job。因此,您的请求处理程序将根据您的计划收到HTTP请求,然后使用fetch()执行Outbound Request。请参阅doc以了解限制(例如端口限制)。对于此设置,我还建议配置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()限制不符合您的要求,您可能需要考虑灵活环境或VM。

答案 1 :(得分:0)

我已经完成了你过去在这里提出的问题,提取天气数据(可能来自.gov源码),然后对其进行处理并将其存储在数据库中。

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

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