在Ruby on Rails上调度并停止睡眠方法

时间:2015-03-11 12:11:12

标签: ruby-on-rails-3.2 delay sleep

我想在Ruby on Rails中每30分钟安排一次执行。我知道可以使用sleep。还有其他有效的方法吗?

请注意Cron工作,"每当"宝石不会有用,因为我不希望它只是执行的一部分。一旦sleep被调用,除了中止之外还有其他任何方法可以将其唤醒吗?

1 个答案:

答案 0 :(得分:0)

我相信你可以通过捕捉过程信号来“唤醒它”

trap('INT') do
  # do something
end

要唤醒一个线程,你调用'run'方法,即使它处于'sleep'状态,它也会恢复执行

t = Thread.new do
  puts 'going to sleep'
  sleep 100
  loop do
    puts '.'
  end
end

loop do
  sleep 3
  puts t.status
  t.run
end

您可以对主线程执行相同操作,只需确保使用Thread :: main

获取它
Thread.new do
  sleep 3
  puts Thread::main.status
  Thread::main.run
end

puts 'going to sleep'
sleep 100
loop do
  puts '.'
end