【问题标题】:App Engine Cron.yaml run multiple instances of a scriptApp Engine Cron.yaml 运行脚本的多个实例
【发布时间】:2015-12-24 02:36:01
【问题描述】:

如何使用 Google App Engine 的 Cron 系统运行多个脚本实例?

默认会运行,然后等待指定的时间间隔再运行,即只运行一个实例。我正在寻找的是如何获得一个需要 2 分钟以上才能运行的脚本,无论它是否已经运行,每 30-60 秒启动一个新实例,这确实假设脚本不会干扰自身,如果多个实例正在运行。这将有效地允许脚本在同一时间段内处理数倍的信息。

编辑,完全改写问题。

【问题讨论】:

  • 不,我不会添加有关我的情况的更多信息,如果我这样做,您将尝试回答一个没有被问到的问题。
  • 与每 30 秒运行一次有何不同?
  • 因为脚本执行时间超过 30 秒,最长为 1.5 分钟。这就是为什么我需要它的实例,而不是脚本本身。由于另一端系统实施不善,执行需要大量时间。通过运行脚本的多个实例,通信延迟会发生多次而不是一次。问题是,如果它们同时运行,它们会得到相同的列表来处理,而这是它们要从中提取的庞大数据库。
  • 可以让cron作业执行一个任务。您也可以为此使用同步关键字。

标签: google-app-engine cron


【解决方案1】:

您只能获得精确到分钟的解决方案。为了获得更细粒度,您需要知道它们是否应该立即处理来自 chron 的请求的实例,或者它们是否必须先休眠 30 秒。 30 秒的睡眠占用了 60 秒请求期限的一半。根据您希望处理的工作负载,这可能需要您使用模块。

顺便说一句,我不知道任何保证计划在 01:00 的作业将在准确 01:00:00(而不是在 01:00: 03).

【讨论】:

    【解决方案2】:

    由于 cron 服务不允许低于 1 分钟的间隔,您需要以不同的方式实现惊人的脚本启动。 一种可能性是让 cron 条目处理程序每​​ 2 分钟运行一次,在触发相应的脚本实例启动之间内部休眠 30 秒(或低至您的“彼此相隔几秒”的要求)。

    注意:睡眠可能会消耗您的 Instance Hours 使用量。您或许能够将交错的触发逻辑整合到您可能拥有的其他一些长期任务中,而不是简单地睡觉。

    要将实际脚本执行与 cron 处理程序(或其他长期任务)执行分离,您可以为每个脚本实例使用专用任务队列,队列处理程序在需要时共享实际脚本代码。实际触发将通过在相应的脚本实例队列中排队任务来完成。作为奖励,您可以通过自定义相应的队列配置来进一步控制每个脚本实例的执行。

    注意:如果您的脚本执行时间超过 2 分钟的 cron 周期,您可能需要在队列配置中采取额外的预防措施,因为可能会有额外的延迟(由于排队),这可能会推动更接近下一个实例启动的相应脚本实例。

    【讨论】:

      【解决方案3】:

      根据 Dave W. Smith 的回答,The Line 将是

      every 1 minute from 00:00 to 23:59
      

      这意味着它会每分钟创建一个新实例,即使脚本运行时间超过一分钟。似乎无法指定秒数。

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-27
        • 1970-01-01
        • 2021-07-01
        • 1970-01-01
        相关资源
        最近更新 更多