【问题标题】:To run periodic tasks with dynamic changing period运行具有动态变化周期的周期性任务
【发布时间】:2023-03-09 07:45:02
【问题描述】:

我有一个任务是监控来自stock website的一些信息。

它应该每10分钟检查一次网站的库存状态

一旦股指上涨,检查周期应改为每5秒

如果 sotck 指数下降,那么检查周期应该是 10 分钟

用于运行周期性任务

我发现 gem whenever 可以做 cron 任务。 但我不知道动态更改检查周期? 有什么想法吗?

【问题讨论】:

  • 您能更详细地描述您的需求吗?如果你想运行不同inverval的任务,你可以有两个任务并添加更多条件来检查是否需要运行。
  • 对于这个简单的任务,我将创建 两个 不同的 cron 任务和一个,比如说,“全局”变量,表示是否应该实际运行频繁的任务。这样每 10 分钟的任务将始终运行,而每 5 秒的任务将在且仅当索引上升时运行。
  • 动态改变任务频率,当你的股票有变化时可以调用system('whenever --update-crontab .......'),然后crontab会更新到新的频率
  • 你也可以在任何时候使用任何条件查看这篇文章它会清除你的疑虑stackoverflow.com/questions/4602418/…

标签: ruby-on-rails ruby


【解决方案1】:

对于这个简单的任务,我将创建两个不同的 cron 任务和一个,比如说,“全局”变量,表示是否应该实际运行频繁的任务。这样每 10 分钟的任务将始终运行,而每 5 秒的任务将在且仅当索引上升时运行。

class Checker
  @@rising = false
  class << self
    def check
      @@rising = actual_check > 0 # core check func
    end
    def freq_check
      check if @@rising
    end
    def rare_check
      check
    end
  end
end

every 10.minutes do
  runner "Checker.rare_check"
end
every 5.seconds do
  runner "Checker.freq_check"
end

这绝对不是一个最优雅的解决方案,但它有一个技巧,并且非常容易处理/测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 2017-07-10
    • 2013-06-08
    • 2019-05-25
    • 2018-11-28
    相关资源
    最近更新 更多